<rss xmlns:atom="http://www.w3.org/2005/Atom" version="2.0">
  <channel>
    <title>Recent changes to Shopify's platform</title>
    <link>https://shopify.dev/changelog</link>
    <description>Shopify's developer changelog documents all changes to Shopify's platform. Find the latest news and learn about new platform opportunities.</description>
    <language>en-us</language>
    <ttl>40</ttl>
    <pubDate>Mon, 27 Jul 2026 16:00:00 +0000</pubDate>
    <lastBuildDate>Mon, 27 Jul 2026 16:00:00 +0000</lastBuildDate>
    <category>Changelog</category>
    <atom:link rel="self" type="application/rss+xml" href="https://shopify.dev/changelog/feed.xml"/>
  <item>
    <title>POS UI extensions can now print directly to hardware receipt printers</title>
    <description><![CDATA[ <div class=""><p>POS UI Extensions <code>2026-07</code> introduces the <a href="https://shopify.dev/docs/api/pos-ui-extensions/2026-07/target-apis/platform-apis/printing-api" target="_blank" class="body-link">Printing API</a> (<code>shopify.printing</code>), which enables extensions to discover hardware printers with <code>getPrinters()</code> and send documents directly to a connected receipt printer with <code>print()</code>.</p>
<p>The Printing API supersedes <code>shopify.print</code>, which is now deprecated. No immediate action is required; plan to migrate when you adopt <code>2026-07</code>.</p>
<h2>What changed</h2>
<ul>
<li><code>shopify.printing.getPrinters()</code> returns the hardware printers available to the device. Each printer includes an <code>id</code>, <code>name</code>, and <code>connected</code> status.</li>
<li><code>shopify.printing.print(src, options?)</code> prints the document at <code>src</code>. If you omit <code>options.printer</code>, the system print dialog opens. If you pass a printer returned by <code>getPrinters()</code>, the document prints directly to that printer with no dialog.</li>
</ul>
<p>The <code>src</code> must be either a relative path appended to your app’s <code>application_url</code>, or a full URL on the same origin. The document is fetched using the extension’s session token.</p>
<p>Receipt printers can render HTML and images directly. PDFs require the system print dialog: if you pass a <code>printer</code> when <code>src</code> points to a PDF, <code>shopify.printing.print</code> throws an error. For PDFs, always omit <code>options.printer</code> and rely on the system print dialog.</p>
<p>Previously, <code>shopify.print</code> could only open the system print dialog, which cannot target dedicated receipt printers. Earlier POS UI Extensions API versions are unchanged.</p>
<blockquote>
<p>Note:
Hardware printer discovery requires Shopify POS version 11.11.0 or later. On earlier versions, <code>getPrinters()</code> returns an empty array, even when a receipt printer is paired. This does not affect the system print dialog, which remains available.</p>
</blockquote>
<p>Always handle the empty-array case by falling back to the system print dialog. This also covers merchants without a receipt printer:</p>
<pre><code class="language-jsx">const printers = await shopify.printing.getPrinters();
const receiptPrinter = printers.find((printer) =&gt; printer.connected);

if (receiptPrinter) {
  await shopify.printing.print('/print/receipt', {printer: receiptPrinter});
} else {
  await shopify.printing.print('/print/receipt');
}
</code></pre>
<p>The Printing API is available on all POS UI extension targets. To verify direct printing, test on a development store with POS 11.11.0 or later and a paired receipt printer. Call <code>shopify.printing.print</code> with a printer from <code>getPrinters()</code>; if the job prints without a dialog, direct printing is working.</p>
<h2>Related docs</h2>
<ul>
<li><a href="https://shopify.dev/docs/api/pos-ui-extensions/2026-07/target-apis/platform-apis/printing-api" target="_blank" class="body-link">Printing API reference</a></li>
<li><a href="https://shopify.dev/docs/api/pos-ui-extensions/2026-07/target-apis/platform-apis/print-api" target="_blank" class="body-link">Print API reference (deprecated)</a></li>
</ul>
</div> ]]></description>
    <pubDate>Mon, 27 Jul 2026 16:00:00 +0000</pubDate>
    <atom:published>2026-07-27T16:00:00.000Z</atom:published>
    <atom:updated>2026-07-27T16:00:00.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <category>POS Extensions</category>
    <category>2026-07</category>
    <link>https://shopify.dev/changelog/pos-ui-extensions-can-now-print-directly-to-hardware-receipt-printers</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/pos-ui-extensions-can-now-print-directly-to-hardware-receipt-printers</guid>
  </item>
  <item>
    <title>Invalid metafield queries now return errors in the GraphQL Admin API</title>
    <description><![CDATA[ <div class=""><p>Starting in API version 2026-10, the GraphQL Admin API returns an error when a query filters by a metafield that isn't set up for filtering, instead of silently returning incorrect results. This is a breaking change. It affects apps that filter resources by metafield on version 2026-10 or later, and you'll need to update affected queries before you upgrade.</p>
<h2>What changed</h2>
<p>In API version 2026-10 and later, the GraphQL Admin API checks metafield filters before it runs a query. If a query filters by a metafield that can't be used for filtering, the query returns an error explaining the problem instead of ignoring the invalid predicate and returning an incorrect result.</p>
<p>A metafield filter commonly fails when:</p>
<ul>
<li>The metafield doesn't have a definition.</li>
<li>The metafield's definition isn't configured to allow filtering.</li>
<li>The metafield's type doesn't support the filter or comparison you used.</li>
</ul>
<p>Previously, invalid predicates in metafield filters were silently ignored, so a query with an invalid filter could return misleading results. Now the response tells you the filter is the problem, so you can correct it.</p>
<h2>Who's affected</h2>
<p>This change affects apps and integrations that filter by metafields in the GraphQL Admin API (for example, filtering products, orders, or customers by a metafield) on API version 2026-10 or later. Queries on version 2026-07 and earlier keep the previous behavior and aren't affected until you upgrade.</p>
<p>You're affected only when a query filters by a metafield that isn't valid for filtering. Queries that filter by metafields set up for filtering, using a supported comparison, behave exactly as before and return the same results.</p>
<h2>Why this matters</h2>
<p>Silently returning incorrect results made invalid metafield filters hard to catch: a mistyped or unsupported filter looked identical to a query that simply had different matches. Returning an error instead lets you find and fix these problems during development, rather than shipping a filter that quietly returns nothing in production.</p>
<h2>Breaking changes and migrations</h2>
<p>API version 2026-10 is scheduled for release on October 1, 2026. Once you make requests on 2026-10 or later, a query that filters by a metafield that isn't set up for filtering returns an error instead of an empty result.</p>
<p>To migrate:</p>
<ol>
<li>Find the queries in your app that filter by metafields in the GraphQL Admin API.</li>
<li>For each one, confirm the metafield has a definition, the definition <a href="https://shopify.dev/docs/apps/build/metafields/use-metafield-capabilities#admin-filterable" target="_blank" class="body-link">allows filtering</a>, and the <a href="https://shopify.dev/docs/apps/build/metafields/query-using-metafields" target="_blank" class="body-link">comparison you use</a> is supported for that metafield's type.</li>
<li>Update any filter that references a metafield that isn't set up for filtering.</li>
<li>Test your queries against version 2026-10 and confirm they return results without an error.</li>
</ol>
<p>If a metafield you rely on can't be filtered yet, keep those queries on version 2026-07 or earlier until you've updated your app, and set up the metafield definition for filtering before you upgrade.</p>
</div> ]]></description>
    <pubDate>Fri, 24 Jul 2026 16:00:00 +0000</pubDate>
    <atom:published>2026-07-24T16:00:00.000Z</atom:published>
    <atom:updated>2026-07-24T16:00:00.000Z</atom:updated>
    <category>Action Required</category>
    <category>API</category>
    <category>Breaking API Change</category>
    <category>Admin GraphQL API</category>
    <category>Metafields and metaobjects</category>
    <category>2026-10</category>
    <link>https://shopify.dev/changelog/invalid-metafield-queries-now-return-errors-in-the-graphql-admin-api</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/invalid-metafield-queries-now-return-errors-in-the-graphql-admin-api</guid>
  </item>
  <item>
    <title>Metafield triggers and additional topics are now available for Events</title>
    <description><![CDATA[ <div class=""><p>Apps can now subscribe to events for <a href="https://shopify.dev/docs/api/events/latest/order" target="_blank" class="body-link"><code>Order</code></a>, <a href="https://shopify.dev/docs/api/events/latest/collection" target="_blank" class="body-link"><code>Collection</code></a>, <a href="https://shopify.dev/docs/api/events/latest/intentory-item" target="_blank" class="body-link"><code>InventoryItem</code></a>, <a href="https://shopify.dev/docs/api/events/latest/inventory-shipment" target="_blank" class="body-link"><code>InventoryShipment</code></a>, <a href="https://shopify.dev/docs/api/events/latest/location" target="_blank" class="body-link"><code>Location</code></a>, and can subscribe to metafield changes on <a href="https://shopify.dev/docs/api/events/latest/product?accordionItem=producttriggers-product.metafield" target="_blank" class="body-link"><code>Product</code></a>, <a href="https://shopify.dev/docs/api/events/latest/order" target="_blank" class="body-link">Order</a>, <a href="https://shopify.dev/docs/api/events/latest/customer?accordionItem=customertriggers-customer.metafield" target="_blank" class="body-link"><code>Customer</code></a>, <a href="https://shopify.dev/docs/api/events/latest/collection?accordionItem=collectiontriggers-collection.metafield" target="_blank" class="body-link"><code>Collection</code></a> and <a href="https://shopify.dev/docs/api/events/latest/location" target="_blank" class="body-link"><code>Location</code></a>. <code>ProductVariant</code> metafields are supported through the <code>Product</code> topic.</p>
<p>This gives apps a precise way to react to more objects and custom data changes. Apps can target the fields that matter in <code>triggers</code>, query the resource that changed, and avoid subscribing to every resource update just to diff payloads in their event handler.</p>
<p>Both <code>$app</code> metafields and regular metafields are supported. Access control still applies, so an app must have access to the metafield to subscribe to changes and receive the queried data. For example, an app can subscribe to two targeted product metafields in <code>shopify.app.toml</code> and use <code>query_variables</code> to fetch the metafield that actually changed:</p>
<pre><code class="language-shell">[events]
api_version = &quot;unstable&quot;

[[events.subscription]]
handle = &quot;product_material_sync&quot;
topic = &quot;Product&quot;
actions = [&quot;update&quot;]
triggers = [
  &quot;product.metafield(namespace: 'custom', key: 'material').value&quot;,
  &quot;product.metafield(namespace: '$app', key: 'sourcing_status').value&quot;
]

uri = &quot;/events/product&quot;

query = &quot;&quot;&quot;
query ProductMetafieldSync(
  $productId: ID!
  $metafieldNamespace: String!
  $metafieldKey: String!
) {
  product(id: $productId) {
    id
    title
    metafield(namespace: $metafieldNamespace, key: $metafieldKey) {
      namespace
      key
      value
      type
    }
  }
}
&quot;&quot;&quot;
</code></pre>
<p>When one of those metafields changes, apps receive the payload they designed:</p>
<pre><code class="language-json">{
  &quot;topic&quot;: &quot;Product&quot;,
  &quot;action&quot;: &quot;update&quot;,
  &quot;handle&quot;: &quot;product_material_sync&quot;,
  &quot;data&quot;: {
    &quot;product&quot;: {
      &quot;id&quot;: &quot;gid://shopify/Product/1234567890&quot;,
      &quot;title&quot;: &quot;Canvas Tote&quot;,
      &quot;metafield&quot;: {
        &quot;namespace&quot;: &quot;custom&quot;,
        &quot;key&quot;: &quot;material&quot;,
        &quot;value&quot;: &quot;Cotton&quot;,
        &quot;type&quot;: &quot;single_line_text_field&quot;
      }
    }
  },
  &quot;fields_changed&quot;: [
    &quot;product.metafield(namespace: 'custom', key: 'material').value&quot;
  ],
  &quot;query_variables&quot;: {
    &quot;productId&quot;: &quot;gid://shopify/Product/1234567890&quot;,
    &quot;metafieldNamespace&quot;: &quot;custom&quot;,
    &quot;metafieldKey&quot;: &quot;material&quot;
  }
}
</code></pre>
<p>If your subscription has no <code>triggers</code>, or subscribes to a parent trigger such as <code>product</code>, it can now receive events for metafield changes on supported resources too. To receive only specific metafield changes, add targeted metafield triggers for the namespace and key your app needs.</p>
<p>Events remain available in the <code>unstable</code> API version during developer preview. For topics that are not supported yet, continue using webhooks alongside Events in <code>shopify.app.toml</code>.</p>
<p>Learn more about </p>
<ul>
<li>Events: <a href="https://shopify.dev/docs/apps/build/events" target="_blank" class="body-link">https://shopify.dev/docs/apps/build/events</a>  </li>
<li>Order: <a href="https://shopify.dev/docs/api/events/latest/order" target="_blank" class="body-link">https://shopify.dev/docs/api/events/latest/order</a>   </li>
<li>Collection: <a href="https://shopify.dev/docs/api/events/latest/collection" target="_blank" class="body-link">https://shopify.dev/docs/api/events/latest/collection</a>   </li>
<li>InventoryItem: <a href="https://shopify.dev/docs/api/events/latest/intentory-item" target="_blank" class="body-link">https://shopify.dev/docs/api/events/latest/intentory-item</a>   </li>
<li>InventoryShipment: <a href="https://shopify.dev/docs/api/events/latest/inventory-shipment" target="_blank" class="body-link">https://shopify.dev/docs/api/events/latest/inventory-shipment</a>   </li>
<li>Location: <a href="https://shopify.dev/docs/api/events/latest/location" target="_blank" class="body-link">https://shopify.dev/docs/api/events/latest/location</a></li>
</ul>
</div> ]]></description>
    <pubDate>Tue, 21 Jul 2026 20:00:00 +0000</pubDate>
    <atom:published>2026-07-21T20:00:00.000Z</atom:published>
    <atom:updated>2026-07-21T20:00:00.000Z</atom:updated>
    <category>API</category>
    <category>Update</category>
    <category>Events &amp; webhooks</category>
    <link>https://shopify.dev/changelog/metafield-triggers-and-additional-topics-are-now-available-for-events</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/metafield-triggers-and-additional-topics-are-now-available-for-events</guid>
  </item>
  <item>
    <title>Liquid templates can now compose pages with blocks and partials</title>
    <description><![CDATA[ <div class=""><p>The Liquid July ’26 developer preview introduces a simpler way to build theme pages. Page structure can live directly in a Liquid template, where developers and coding agents can read and edit everything in one place. The peview adds two Liquid tags:</p>
<ul>
<li><code>{% block %}</code> renders a reusable theme block directly from a template. Name the block, pass its inputs, and provide body content much like you would with <code>{% render %}</code>.</li>
<li><code>{% partial %}</code> defines a named region of server-rendered HTML that JavaScript can refresh without reloading the full page.</li>
</ul>
<p>Together, these tags let you compose pages in Liquid and add dynamic storefront interactions without moving rendering into a client-side framework.</p>
<p>The preview also adds new Theme Check rules for Liquid-first themes. They catch syntax errors, excessive complexity, oversized files, invalid schema structure, and mismatches between block arguments, schemas, and <code>{% doc %}</code> declarations. See the <a href="https://github.com/Shopify/theme-tools/releases/tag/%40shopify%2Ftheme-check-common%403.28.0" target="_blank" class="body-link">Theme Check 3.28.0 release notes</a> for the complete list.</p>
<p>Existing themes continue to work with sections, theme settings, and JSON templates. This preview adds a Liquid-first composition model alongside the existing theme architecture.</p>
<p>To try it, create a development store with the <strong>Liquid July ’26</strong> developer preview. Start with the <a href="https://github.com/Shopify/skeleton-theme/tree/rc-v2.0.0" target="_blank" class="body-link">skeleton theme release candidate</a>, or add the new tags to your own theme.</p>
<p>Learn more by reading the <a href="https://shopify.dev/docs/storefronts/themes/getting-started/developer-preview" target="_blank" class="body-link">developer preview overview</a>, <a href="https://shopify.dev/docs/storefronts/themes/getting-started/developer-preview/block" target="_blank" class="body-link"><code>{% block %}</code> reference</a>, and <a href="https://shopify.dev/docs/storefronts/themes/getting-started/developer-preview/partial" target="_blank" class="body-link"><code>{% partial %}</code> reference</a>. Share feedback in the <a href="https://community.shopify.dev/" target="_blank" class="body-link">Shopify developer community</a>.</p>
</div> ]]></description>
    <pubDate>Tue, 21 Jul 2026 17:00:00 +0000</pubDate>
    <atom:published>2026-07-21T17:00:00.000Z</atom:published>
    <atom:updated>2026-07-21T17:00:00.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <category>Liquid</category>
    <link>https://shopify.dev/changelog/developer-preview-liquid-block-and-partial-tags</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/developer-preview-liquid-block-and-partial-tags</guid>
  </item>
  <item>
    <title>Full-stack capabilities to power app analytics</title>
    <description><![CDATA[ <div class=""><p>For app developers, building merchant-facing analytics has always meant standing up your own stack: a charting library, a data warehouse to sync merchant data into, handling currencies and locales, and a UI that never quite matched the Shopify admin. With these updates, Shopify Analytics becomes a full-stack analytics platform that apps can build on directly, offloading the infrastructure to Shopify and putting your app's data where merchants already make decisions.</p>
<p>Here's what shipped, and how it fits together.</p>
<br/>

<h2>Bring your app's data into Shopify Analytics</h2>
<h3>Metafields</h3>
<p>Mark a metafield definition as analytics-queryable, and it becomes a dimension in ShopifyQL alongside store data. Add, for example, a <code>campaign_source</code> metafield to an order or a <code>subscription_status</code> metafield to a customer. Merchants can group, filter, and chart on it—no ETL, no separate schema.</p>
<pre><code class="language-sql">FROM sales
  SHOW total_sales
  GROUP BY order.metafields.my_app.campaign_source
  TIMESERIES day
VISUALIZE total_sales
</code></pre>
<h3>App Events (early access)</h3>
<p>App Events in Analytics makes the custom events your app already emits queryable in Shopify Analytics. Declare events from the new registry in <code>shopify.app.toml</code>, emit them through the App Events API, and merchants can query <code>FROM app_events</code> in ShopifyQL the same way they query their store data.</p>
<pre><code class="language-sql">FROM app_events
  SHOW emails_sent
  GROUP BY app_name
  TIMESERIES day
VISUALIZE total_sales
</code></pre>
<br/>

<h2>Query it: ShopifyQL API + dev docs</h2>
<p>The ShopifyQL API, Shopify's analytics query layer, is now a first-class part of the platform, with schema-level reference documentation on shopify.dev. Every metric and dimension is defined in the docs with its type, description, and working examples.</p>
<p><strong>Why it matters:</strong></p>
<ul>
<li>For developers: Build against a stable, versioned, schema-documented surface.</li>
<li>For LLMs and agents: Public schema docs mean AI toolchains can generate working ShopifyQL.</li>
</ul>
<br/>

<h2>Embed it: Analytics Web Components</h2>
<p>The same web components that render analytics in the Shopify admin— the metric card (<code>&lt;s-shopifyql-metric-card&gt;</code>), the metrics bar (<code>&lt;s-metrics-bar&gt;</code>), and its date picker (<code>&lt;s-metrics-bar-date-picker&gt;</code>)—are now available for third-party apps to embed. Render a chart with a single element:</p>
<pre><code class="language-html">&lt;s-shopifyql-metric-card
  heading=&quot;My weekly sales&quot;
  query=&quot;FROM sales SHOW total_sales TIMESERIES week VISUALIZE total_sales TYPE bar&quot;&gt;
&lt;/s-shopifyql-metric-card&gt;
</code></pre>
<p>Load <code>analytics-ui.js</code> (after <code>polaris.js</code>), enable Direct API access, then drop in the element. No charting library. No currency or locale handling. No data-formatting code. The component runs the query, renders the chart, and stays in sync with the Shopify admin.</p>
<br/>

<h2>Enrich it: Annotations API + Metric Targets API</h2>
<p>Two new APIs let apps and merchants add context on top of the numbers.</p>
<h3>Annotations API</h3>
<p>Partner apps can now create annotations directly on merchant charts through the GraphQL Admin API. Loyalty apps can mark the day a program launched; email apps can mark a new campaign; subscription apps can mark a pricing change—with proper app attribution rendered in the chart panel.</p>
<p>Required scopes: <code>read_analytics_annotations</code>, <code>write_analytics_annotations</code>.</p>
<h3>Metric Targets API</h3>
<p>Merchants can now set targets on any metric—total sales next quarter, ad-attributed revenue this week—and track progress visually inside reports and dashboards. Targets are a new core primitive in the GraphQL Admin API, so apps can create, read, and overlay them on charts programmatically.</p>
<br/>

<h3>How it fits together</h3>
<ol>
<li>Model your data with Metafields (and App Events, in early access).</li>
<li>Query with the ShopifyQL API.</li>
<li>Embed with Analytics Web Components.</li>
<li>Enrich with Annotations and Metric Targets.</li>
</ol>
<p>All inside Shopify, where merchants already make decisions.</p>
<br/>

<h2>Get started</h2>
<ul>
<li><a href="https://shopify.dev/docs/apps/build/analytics" target="_blank" class="body-link">Analytics for Developers</a></li>
<li><a href="https://shopify.dev/docs/apps/build/metafields/use-metafield-capabilities#analytics-queryable" target="_blank" class="body-link">Metafields</a></li>
<li>App Events in Analytics — <a href="https://forms.gle/teCRjZK1AKPjzrgF9" target="_blank" class="body-link">Sign up for early access</a></li>
<li><a href="https://shopify.dev/docs/api/shopifyql" target="_blank" class="body-link">ShopifyQL API</a></li>
<li><a href="https://shopify.dev/docs/api/shopifyql/latest/web-components" target="_blank" class="body-link">Web Components</a></li>
<li><a href="https://shopify.dev/docs/api/admin-graphql/2026-10/mutations/analyticsAnnotationCreate" target="_blank" class="body-link">Annotations API</a></li>
<li><a href="https://shopify.dev/docs/api/admin-graphql/unstable/input-objects/AnalyticsTargetCreateInput" target="_blank" class="body-link">Metric Targets API</a></li>
</ul>
</div> ]]></description>
    <pubDate>Tue, 21 Jul 2026 13:00:00 +0000</pubDate>
    <atom:published>2026-07-21T13:00:00.000Z</atom:published>
    <atom:updated>2026-07-21T13:14:22.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <category>Admin GraphQL API</category>
    <category>App Events API</category>
    <category>Metafields and metaobjects</category>
    <category>ShopifyQL</category>
    <category>2026-10</category>
    <link>https://shopify.dev/changelog/full-stack-capabilities-to-power-app-analytics</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/full-stack-capabilities-to-power-app-analytics</guid>
  </item>
  <item>
    <title>Physical inventory feature preview</title>
    <description><![CDATA[ <div class=""><p>The physical inventory feature preview gives you early access to a new set of inventory APIs in the <code>unstable</code> version of the GraphQL Admin API. Enable it on a development store to build and test against the core primitives merchants use to organize a stockroom: bins, counts, and purchase orders.</p>
<p>Because these APIs are under active development, they're available behind a feature preview. This lets you start building early and provide feedback on the schema and behavior before the APIs become stable.</p>
<h3>What's included</h3>
<ul>
<li><strong>Bins.</strong> Named storage locations within a location, such as a shelf or rack. Create and update bins, and read the on-hand quantities held in each one.</li>
<li><strong>Counts.</strong> Set the on-hand quantity of an inventory item in a specific bin with the <code>inventoryCountCreate</code> mutation.</li>
<li><strong>Purchase orders.</strong> Read purchase order data through the GraphQL Admin API, including the purchase order, its line items, and its supplier.</li>
</ul>
<h3>How to enable it</h3>
<ol>
<li><a href="https://shopify.dev/docs/apps/build/dev-dashboard/stores/development-stores" target="_blank" class="body-link">Create a development store</a> or use an existing one.</li>
<li><a href="https://shopify.dev/docs/apps/build/orders-fulfillment/inventory-management-apps/physical-inventory-feature-preview" target="_blank" class="body-link">Enable the <strong>Physical inventory</strong> feature preview</a> on that store.</li>
<li>Configure your app to use the <code>unstable</code> version of the GraphQL Admin API for all physical inventory queries and mutations.</li>
</ol>
<p>Only stores with the feature preview enabled can call these APIs; calls from stores that haven't enabled the preview return an access error.</p>
<p>For examples and details on how bins integrate with your existing location inventory, see the <a href="https://shopify.dev/docs/apps/build/orders-fulfillment/inventory-management-apps/physical-inventory-feature-preview" target="_blank" class="body-link">Physical inventory feature preview guide</a>.</p>
</div> ]]></description>
    <pubDate>Fri, 17 Jul 2026 16:00:00 +0000</pubDate>
    <atom:published>2026-07-17T16:00:00.000Z</atom:published>
    <atom:updated>2026-07-17T16:00:00.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <category>Admin GraphQL API</category>
    <link>https://shopify.dev/changelog/physical-inventory-feature-preview</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/physical-inventory-feature-preview</guid>
  </item>
  <item>
    <title>Card deposit endpoint now requires mTLS certificate</title>
    <description><![CDATA[ <div class=""><p>Shopify's card-deposit endpoint now requires a Shopify-issued mTLS client certificate. Apps that store cardholder data with the <code>customerPaymentMethodCreditCardCreate</code> and <code>customerPaymentMethodCreditCardUpdate</code> GraphQL Admin API mutations must first deposit that data at Shopify's <code>/sessions</code> card-deposit endpoint to receive a session identifier. That deposit call must present a Shopify-issued certificate by <strong>October 15, 2026</strong>. This is a required change: after enforcement begins, deposit requests will be required to have a valid certificate. If your app deposits cardholder data, you must update.</p>
<h2>What changed</h2>
<p>The card-deposit endpoint at <code>https://checkout-mtls.pci.shopifyinc.com/sessions</code> is unchanged. What's new is that every request to it must present a Shopify-issued mTLS client certificate. Previously, requests to this endpoint did not require a client certificate.</p>
<p>The GraphQL Admin API vault mutations are unchanged. You continue to call <code>customerPaymentMethodCreditCardCreate</code> and <code>customerPaymentMethodCreditCardUpdate</code> with the session identifier returned by the deposit call, and your GraphQL Admin API OAuth flow is unaffected.</p>
<p><code>customerPaymentMethodRemoteCreate</code> is out of scope. It imports references to payment methods already held at external gateways and deposits no cardholder data to Shopify.</p>
<h2>Who's affected</h2>
<p>This applies to apps that deposit cardholder data to Shopify through <code>customerPaymentMethodCreditCardCreate</code> or <code>customerPaymentMethodCreditCardUpdate</code>.</p>
<p>Apps that only call <code>customerPaymentMethodRemoteCreate</code> to import payment methods from external gateways such as Stripe, Braintree, Authorize.Net, Adyen, or PayPal are not affected and need to take no action.</p>
<h2>Why this matters</h2>
<p>All cardholder-data traffic reaching the deposit endpoint must be attributable to an authenticated caller. Requiring a client certificate lets Shopify verify who is depositing card data ahead of Black Friday and Cyber Monday 2026, and is the prerequisite for rejecting unauthenticated deposit traffic.</p>
<h2>What to do</h2>
<p>If your app deposits cardholder data, migrate before <strong>October 15, 2026</strong>:</p>
<ol>
<li>Confirm whether your app calls <code>customerPaymentMethodCreditCardCreate</code> or <code>customerPaymentMethodCreditCardUpdate</code>. If it only calls <code>customerPaymentMethodRemoteCreate</code>, no action is required.</li>
<li>Request a Shopify-issued client certificate at <a href="mailto:shopify-mtls-partnerships@shopify.com" target="_blank" class="body-link">shopify-mtls-partnerships@shopify.com</a>. Include your API client ID and technical point of contact. First certificates are signed manually by Shopify and take a few days, so start early.</li>
<li>Present the certificate on your <code>/sessions</code> deposit call, and continue passing the returned session identifier to the vault mutations unchanged.</li>
<li>Confirm your deposit traffic now arrives with a valid certificate. Shopify validates the cutover on our side.</li>
</ol>
<p>After your first certificate, rotate it self-serve with Shopify's Certificate Signing Service before the 1-year TTL expires . No Shopify involvement is needed. A missed rotation stops your deposits, so monitor certificate expiry as part of your standard observability.</p>
<p>Apps that haven't migrated by October 15, 2026 lose the ability to deposit new cardholder data once the certificate requirement is enforced.</p>
<h2>Related docs</h2>
<ul>
<li><a href="https://shopify.dev/docs/api/admin-graphql/latest/mutations/customerPaymentMethodCreditCardCreate" target="_blank" class="body-link"><code>customerPaymentMethodCreditCardCreate</code> reference</a></li>
<li><a href="https://shopify.dev/docs/api/admin-graphql/latest/mutations/customerPaymentMethodCreditCardUpdate" target="_blank" class="body-link"><code>customerPaymentMethodCreditCardUpdate</code> reference</a></li>
</ul>
</div> ]]></description>
    <pubDate>Thu, 16 Jul 2026 16:00:00 +0000</pubDate>
    <atom:published>2026-07-16T16:00:00.000Z</atom:published>
    <atom:updated>2026-07-16T16:00:00.000Z</atom:updated>
    <category>API</category>
    <category>Update</category>
    <link>https://shopify.dev/changelog/card-deposit-endpoint-now-requires-mtls-certificate</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/card-deposit-endpoint-now-requires-mtls-certificate</guid>
  </item>
  <item>
    <title>Updated App Store requirements: 4.1.2 Use a unique name for your app</title>
    <description><![CDATA[ <div class=""><p>Your app's name is what merchants use to discover, identify, and remember your app. We've added <a href="https://shopify.dev/docs/apps/launch/shopify-app-store/app-store-requirements#use-a-unique-name-for-your-app" target="_blank" class="body-link">requirement 4.1.2, &quot;Use a unique name for your app,&quot;</a> to reduce merchant confusion over identical and copycat app names in Shopify’s App Store. </p>
<p>We know that changing an app name isn't easy — it affects your brand, your discoverability, and your existing merchants. That's why this requirement establishes the standard now, while enforcement will roll out gradually. Affected apps will be audited in waves and given a designated timeframe to achieve compliance.</p>
<h2>What's changing</h2>
<p>This requirement gives Shopify the ability to act on app name violations. Non-compliant apps will be notified and given a defined timeframe to update their names where failure to comply may result in being delisted from the App Store. Enforcement actions will roll out gradually, so affected developers will have time to plan and make changes.</p>
<h2>What this means for you</h2>
<ul>
<li><strong>If you believe your published app violates this policy:</strong> Start considering a plan to rename your app to get ahead of enforcement actions. Ensure that your app name starts with your distinctive brand identifier and does not mislead merchants in confusing it with another app, developer, brand, or Shopify product. </li>
<li><strong>If you're submitting a new app:</strong> Choose a distinct name that represents your own brand. Don't impersonate other apps or mislead merchants with your app name.</li>
<li><strong>If your app name is being copied:</strong> At this time, we can only accept reports with a valid registered trademark. If your app trademark is being copied, you can <a href="https://www.shopify.com/legal/tools/report-an-issue/trademark-infringement" target="_blank" class="body-link">submit a report to Shopify</a>.</li>
</ul>
</div> ]]></description>
    <pubDate>Wed, 15 Jul 2026 16:00:00 +0000</pubDate>
    <atom:published>2026-07-15T16:00:00.000Z</atom:published>
    <atom:updated>2026-07-15T17:36:35.000Z</atom:updated>
    <category>App store</category>
    <category>Update</category>
    <link>https://shopify.dev/changelog/updated-app-store-requirements-4-1-2-use-a-unique-name-for-your-app</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/updated-app-store-requirements-4-1-2-use-a-unique-name-for-your-app</guid>
  </item>
  <item>
    <title>Storefront API `@inContext` supports `channelId`</title>
    <description><![CDATA[ <div class=""><p>As of Storefront API version <code>2026-10</code>, the <code>@inContext</code> directive accepts an optional <code>channelId</code> argument. Use <code>channelId</code> to apply a specific sales channel’s context to an entire query, including channel-specific product availability and pricing.</p>
<p>Example:</p>
<pre><code class="language-graphql">query Product($handle: String!, $channelId: ID!)
  @inContext(channelId: $channelId) {
  product(handle: $handle) {
    id
    title
    availableForSale
    priceRange {
      minVariantPrice {
        amount
        currencyCode
      }
    }
  }
}
</code></pre>
<h2>Why it's changing</h2>
<p>The existing <code>@inContext</code> directive lets you set buyer context such as <code>country</code> and <code>language</code>. With <code>channelId</code>, you can now:</p>
<ul>
<li>Target a specific channel (for example, a marketplace or custom sales channel) when fetching products, prices, and availability.</li>
<li>Build channel-aware storefronts that show the correct catalog, pricing, and merchandising rules for each channel.</li>
<li>Reduce custom logic in your app by relying on the API to apply channel-specific behavior.</li>
</ul>
<h2>Requirements</h2>
<p><strong>Access requirement:</strong> You can only pass the ID of a channel created by the API client making the request.</p>
<p><strong>Fallback behavior:</strong> If you omit <code>channelId</code>, the Storefront API uses the first channel owned by that API client. Pass <code>channelId</code> explicitly when your app owns multiple channels or needs to select a specific channel.</p>
<p>Learn more about <a href="https://shopify.dev/docs/storefronts/headless/building-with-the-storefront-api/in-context" target="_blank" class="body-link">contextual queries</a>.</p>
</div> ]]></description>
    <pubDate>Wed, 15 Jul 2026 16:00:00 +0000</pubDate>
    <atom:published>2026-07-15T16:00:00.000Z</atom:published>
    <atom:updated>2026-07-16T02:06:49.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <category>Storefront API</category>
    <category>2026-10</category>
    <link>https://shopify.dev/changelog/new-channelid-argument-for-incontext-directive-in-storefront-api-2026-10</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/new-channelid-argument-for-incontext-directive-in-storefront-api-2026-10</guid>
  </item>
  <item>
    <title>`productId`, `title`,`variantSku`, and `variantTitle` fields added to `ExchangeLineItem`</title>
    <description><![CDATA[ <div class=""></div> ]]></description>
    <pubDate>Wed, 15 Jul 2026 16:00:00 +0000</pubDate>
    <atom:published>2026-07-15T16:00:00.000Z</atom:published>
    <atom:updated>2026-07-15T16:54:12.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <category>Admin GraphQL API</category>
    <category>2026-10</category>
    <link>https://shopify.dev/changelog/new-fields-on-exchangelineitem</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/new-fields-on-exchangelineitem</guid>
  </item>
  <item>
    <title> POS UI Extensions 2026-07 adds discount allocations to bundle components</title>
    <description><![CDATA[ <div class=""><p>Starting with POS UI Extensions API version 2026-07, product bundle components in cart line item data include discount allocation details.                                                                                                                             </p>
<p>Apps can access component-level discount allocations from bundle components on a cart line item, for example:                      </p>
<p><code>shopify.cartLineItem.components?.[0]?.discountAllocations</code>                                                                        </p>
<p>The same <code>LineItem</code> shape is also used in Cart API cart state, so apps that read line items from  <code>shopify.cart.current.value.lineItems</code> can access component discount allocations on bundle components there as well.                 </p>
<p>Previously, POS UI Extensions exposed discount allocations on the parent line item through <code>lineItem.discountAllocations</code>, while bundle components exposed component-level tax information but not component-level discount allocations. This made it difficult for apps to calculate component-level discount, tax, reporting, or compliance values for discounted product bundles.                     </p>
<p>This change is additive. Apps using API version 2026-04 or earlier do not need to make any changes.                                </p>
<p>Apps adopting API version 2026-07 can use <code>components[].discountAllocations</code> when working with discounted product bundles. Apps should handle the property being absent or empty when a bundle component has no discount allocations.                                </p>
<p>For more information, see the [Cart Line Item API reference](<a href="https://shopify.dev/docs/api/pos-ui-extensions/2026-07-rc/target-apis/contextual-apis/cart-line-item-api#cartlineitemapi-" target="_blank" class="body-link">https://shopify.dev/docs/api/pos-ui-extensions/2026-07-rc/target-apis/contextual-apis/cart-line-item-api#cartlineitemapi-</a> propertydetail-cartlineitem) and the [Cart API <code>current</code>  property](<a href="https://shopify.dev/docs/api/pos-ui-extensions/2026-07-rc/target-apis/contextual-apis/cart-api#cartapi-propertydetail-curr" target="_blank" class="body-link">https://shopify.dev/docs/api/pos-ui-extensions/2026-07-rc/target-apis/contextual-apis/cart-api#cartapi-propertydetail-curr</a> ent). </p>
</div> ]]></description>
    <pubDate>Wed, 15 Jul 2026 04:00:00 +0000</pubDate>
    <atom:published>2026-07-15T04:00:00.000Z</atom:published>
    <atom:updated>2026-07-15T04:00:00.000Z</atom:updated>
    <category>API</category>
    <category>Update</category>
    <category>POS Extensions</category>
    <category>2026-07</category>
    <link>https://shopify.dev/changelog/pos-ui-extensions-2026-07-adds-discount-allocations-to-bundle-components</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/pos-ui-extensions-2026-07-adds-discount-allocations-to-bundle-components</guid>
  </item>
  <item>
    <title>POS Extensions now supports a background extension target</title>
    <description><![CDATA[ <div class=""><p>The <code>pos.app.ready.data</code> target runs for the entire POS session, letting your extension observe POS events and run background logic without rendering any UI surface. Use it for event observation, data storage, and calling non-visual background APIs.</p>
<h2>What you need to do</h2>
<p>Subscribe to Shopify POS events with <code>shopify.addEventListener()</code>:</p>
<pre><code class="language-js">shopify.addEventListener('transactioncomplete', (event) =&gt; {
  console.log('Transaction complete', event);
});
</code></pre>
<h2>Supported events</h2>
<p>Supported events include:</p>
<ul>
<li><code>transactioncomplete</code></li>
<li><code>cashtrackingsessionstart</code></li>
<li><code>cashtrackingsessioncomplete</code></li>
</ul>
<p> For comprehensive details and best practices, refer to the <a href="https://shopify.dev/docs/api/pos-ui-extensions/latest/targets/app-background" target="_blank" class="body-link">app background target documentation</a>.</p>
</div> ]]></description>
    <pubDate>Thu, 09 Jul 2026 19:00:00 +0000</pubDate>
    <atom:published>2026-07-09T19:00:00.000Z</atom:published>
    <atom:updated>2026-07-09T19:25:21.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <category>POS Extensions</category>
    <category>2026-07</category>
    <link>https://shopify.dev/changelog/pos-extensions-now-supports-a-background-extension-target</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/pos-extensions-now-supports-a-background-extension-target</guid>
  </item>
  <item>
    <title>Identity verification for Shopify Partners starts today</title>
    <description><![CDATA[ <div class=""><p>Trust is foundational to the Shopify Partner ecosystem. Partners take actions across Shopify that can directly affect merchants, and merchants need confidence when granting access to their stores. We’re introducing identity verification for partners to help protect merchants, reduce abuse, and make it harder for bad actors to operate, while creating a better experience for legitimate partners.</p>
<h2>What changed</h2>
<p>Starting today, Shopify Partners can complete identity verification before requesting collaborator access to merchant stores. Identity verification is optional today and will become mandatory in the coming weeks before sending a new collaborator request.</p>
<p>For this launch:</p>
<ul>
<li>Identity verification applies to sending new collaborator requests. Every user in your partner organization sending a new collaboration will need to verify their identity.</li>
<li>Identity verification isn’t required just to access collaborator shops where a merchant has already granted access.</li>
<li>Verification is completed through Stripe and requires a government-issued photo ID and a selfie or liveness check.</li>
</ul>
<p>We’re starting with collaborator requests because collaborator access is one of the clearest trust moments between merchants and partners. When a merchant approves a collaborator request, they’re giving a partner access to a live store.</p>
<h2>Action required</h2>
<p>If you or anyone in your partner organization sends collaborator requests, complete identity verification on the Request collaborations page in the Dev Dashboard.</p>
<p>Identity verification is optional today, but we recommend completing it now to avoid interruption when it becomes mandatory in the coming weeks. After enforcement begins, unverified users won’t be able to send new collaborator requests until they complete verification.</p>
<p>To prepare:</p>
<ul>
<li>Complete identity verification before sending new collaborator requests.</li>
<li>Make sure every user in your partner organization who requests collaborator access verifies their own identity.</li>
<li>Have a government-issued photo ID ready, along with access to a device that can complete a selfie or liveness check.</li>
<li>Review the related docs below for more context on identity verification and collaborator access.</li>
</ul>
<h2>Related docs</h2>
<ul>
<li><a href="https://help.shopify.com/en/partners/manage-account/verifying-your-identity" target="_blank" class="body-link">Verifying your identity as a Shopify Partner</a></li>
<li><a href="https://help.shopify.com/en/partners/manage-clients-stores/working-on-client-stores#information-shared-with-merchants" target="_blank" class="body-link">Collaborator requests: Information shared with merchants</a></li>
</ul>
</div> ]]></description>
    <pubDate>Thu, 09 Jul 2026 17:15:00 +0000</pubDate>
    <atom:published>2026-07-09T17:15:00.000Z</atom:published>
    <atom:updated>2026-07-09T17:15:00.000Z</atom:updated>
    <category>Action Required</category>
    <category>Platform</category>
    <category>New</category>
    <link>https://shopify.dev/changelog/identity-verification-for-partners</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/identity-verification-for-partners</guid>
  </item>
  <item>
    <title>Hydrogen developer preview update</title>
    <description><![CDATA[ <div class=""><p>The Hydrogen developer preview adds new capabilities to the toolkit and extends the ways developers can build Shopify storefronts:</p>
<ul>
<li><strong>Storefront API caching for catalog data:</strong> Cache products, collections, and pages at the edge instead of hitting the Storefront API on every request.</li>
<li><strong>WebMCP tools for in-browser AI agents:</strong> Expose your storefront to in-browser AI agents so they can search the catalog, browse products, and manage the cart. Loads automatically from Shopify's CDN, no extra integration required.</li>
<li><strong>Customer Account API support:</strong> Build logged-in experiences like order history and profile pages with a typed client that handles login, token refresh, and logout.</li>
<li><strong>Same-origin predictive search:</strong> Add autocomplete search that runs through your own server instead of calling the Storefront API from the browser.</li>
<li><strong>Typed routes and redirects:</strong> Describe your URL structure once and reuse it for redirects, predictive-search URLs, and Shopify-standard resource mapping.</li>
<li><strong>ShopifyScripts for the Shopify browser runtime and unified cart route handling:</strong> Render Shopify's standard script tags and browser runtime in one place, and handle cart routes through a single registration that works the same across frameworks.</li>
</ul>
<p>To get started, visit the <a href="https://shopify.dev/docs/storefronts/headless/developer-preview" target="_blank" class="body-link">Hydrogen developer preview documentation</a>. For a detailed breakdown of this release, read the <a href="https://hydrogen.shopify.dev/update/developer-preview-release-notes-july-8-2026" target="_blank" class="body-link">full release notes</a>.</p>
</div> ]]></description>
    <pubDate>Thu, 09 Jul 2026 16:00:00 +0000</pubDate>
    <atom:published>2026-07-09T16:00:00.000Z</atom:published>
    <atom:updated>2026-07-16T08:21:27.000Z</atom:updated>
    <category>API</category>
    <category>Update</category>
    <category>Hydrogen</category>
    <link>https://shopify.dev/changelog/hydrogen-developer-preview-update</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/hydrogen-developer-preview-update</guid>
  </item>
  <item>
    <title>App Pricing: more plans, no-charge plan testing, and negative and fractional App Events</title>
    <description><![CDATA[ <div class=""><p>We’ve made several updates to App Pricing:</p>
<p><strong>Increased plan limits:</strong> You can now create up to 8 public plans (previously 4) and 15 private plans (previously 10) per app.</p>
<p><strong>No-charge plan testing:</strong> Test app billing flows without generating real charges:</p>
<ul>
<li>During app review, reviewers can now select any of your existing plans, so you no longer need to create a dedicated test plan.</li>
<li>In development stores, you can install your own apps and subscribe to any plan at no cost.</li>
<li>Mark a plan as free to let other partners and developers install your app and test that plan in their own development stores.</li>
</ul>
<p><strong>Additional App Events support:</strong> The App Events API now accepts:</p>
<ul>
<li>Negative values, to adjust or credit previously reported event usage</li>
<li>Fractional values, such as <code>1.5</code></li>
</ul>
<p>Previously, event values were limited to whole numbers greater than 0.</p>
<p>For more details, see <a href="https://shopify.dev/docs/apps/launch/billing/shopify-app-pricing" target="_blank" class="body-link">App pricing</a> and the <a href="https://shopify.dev/docs/apps/launch/billing/shopify-app-pricing/subscription-billing/build-billing-event#understand-the-request-fields" target="_blank" class="body-link">App Events API reference</a>.</p>
</div> ]]></description>
    <pubDate>Thu, 09 Jul 2026 16:00:00 +0000</pubDate>
    <atom:published>2026-07-09T16:00:00.000Z</atom:published>
    <atom:updated>2026-07-09T16:00:00.000Z</atom:updated>
    <category>App store</category>
    <category>Update</category>
    <link>https://shopify.dev/changelog/app-pricing-more-plans-no-charge-plan-testing-and-negative-and-fractional-app-events</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/app-pricing-more-plans-no-charge-plan-testing-and-negative-and-fractional-app-events</guid>
  </item>
  <item>
    <title>POS UI extensions 2026-07 uses per-unit fixed-amount line item discounts</title>
    <description><![CDATA[ <div class=""><p>Starting with POS UI extensions API version 2026-07, <code>FixedAmount</code> line item discounts passed to <code>setLineItemDiscount</code> and <code>bulkSetLineItemDiscounts</code> from the Cart API must represent a per-unit discount.</p>
<h2>Why it's changing</h2>
<p>In API version 2026-04 and earlier, apps could pass a total fixed discount for the entire line item, and Shopify POS automatically converted it to a per-unit value. In API version 2026-07, this conversion no longer occurs. The value you pass is interpreted directly as the discount applied to each unit in the line item.</p>
<p>For example, in API version 2026-07, if you pass <code>'5.00'</code> on a line item with quantity 2, POS applies a $5.00 discount to each unit, for a $10.00 total discount. To apply a $5.00 total discount to a line item with quantity 2, you must instead pass <code>'2.50'</code> as the per-unit discount.</p>
<h2>What you need to do</h2>
<p>This change only affects <code>FixedAmount</code> line item discounts. Percentage discounts are not affected. Apps using API version 2026-04 or earlier do not need to make any changes.</p>
<p>Apps adopting API version 2026-07 must update their discount calculations before using the new version. If your app currently calculates discounts as a total line discount, compute the per-unit discount before calling <code>setLineItemDiscount</code> or <code>bulkSetLineItemDiscounts</code> — for example, by dividing the total discount by the line item quantity.</p>
<p>If the total discount does not divide evenly by the line item quantity, choose a rounded per-unit value that matches your app’s intended discount behavior and ensures the final discount is consistent with your logic.</p>
<p>For more information, see the <a href="https://shopify.dev/docs/api/pos-ui-extensions/2026-07/target-apis/contextual-apis/cart-api" target="_blank" class="body-link">Cart API reference</a>.</p>
</div> ]]></description>
    <pubDate>Wed, 08 Jul 2026 16:00:00 +0000</pubDate>
    <atom:published>2026-07-08T16:00:00.000Z</atom:published>
    <atom:updated>2026-07-08T16:00:00.000Z</atom:updated>
    <category>Action Required</category>
    <category>API</category>
    <category>Breaking API Change</category>
    <category>POS Extensions</category>
    <category>2026-07</category>
    <link>https://shopify.dev/changelog/pos-ui-extensions-2026-07-uses-per-unit-fixed-amount-line-item-discounts</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/pos-ui-extensions-2026-07-uses-per-unit-fixed-amount-line-item-discounts</guid>
  </item>
  <item>
    <title>Prepare your app for migration to Shopify App Pricing </title>
    <description><![CDATA[ <div class=""><p>Developers using the Billing API can now begin preparing their apps to move to Shopify App Pricing. The first part of our migration tool lets you generate, review, edit, and test Shopify App Pricing plans before moving any existing merchant subscriptions. This gives you time to confirm that your pricing configuration is ready while your app continues using its current billing setup.       </p>
<p>Shopify App Pricing provides a standardized pricing experience across the Shopify App Store, plan selection, subscription management, and merchant billing.    </p>
<p><img src="https://shopify.dev/assets/assets/images/changelog/app-pricing/get-started-UIlaOcRT.png" alt="Get Started.png">        </p>
<h2>Generate your App Pricing plans</h2>
<p>In the <strong>Pricing Details</strong> of your app's listing in <a href="https://partners.shopify.com/organizations" target="_blank" class="body-link">Partner Dashboard</a> click <strong>manage</strong>. You'll see the migration tool above your list of plans. The tool automatically creates App Pricing draft plans from your eligible manual plans. Plans that are missing App Pricing required fields, like usage charges, are marked with an <strong>Action needed</strong> badge. </p>
<p><img src="https://shopify.dev/assets/assets/images/changelog/app-pricing/checklist-16p6UBlc.png" alt="Draft plans.png">                                                          </p>
<h2>Review and test your configuration</h2>
<p>After your public and private plans are drafted, you can:</p>
<ol>
<li>Review the generated plan names prices, features, and billing intervals.                                                                           </li>
<li>Edit plans or create additional plans as needed.                                                                                                    </li>
<li>Configure usage charges and app events for usage-based pricing.                                                                                     </li>
<li>Test the plans on a development store owned by the same Partner organization as your app.</li>
<li>Review your plans using the readiness checklist</li>
</ol>
<p>Preparing plans in the tool doesn't migrate your existing shops or subscriptions. Merchants don't need to take action during this stage. For detailed instructions, plan-generation behavior, limitations, and testing requirements, read the <a href="https://shopify.dev/docs/apps/launch/billing/shopify-app-pricing/migrating-to-shopify-app-pricing" target="_blank" class="body-link">Shopify App Pricing migration guide</a>.                                                   </p>
<h2>Coming next: move existing subscriptions</h2>
<p>This release is the first part of the manual billing migration tool. In the coming days, we'll be inviting partners to preview the next part of the tool for moving existing shops and subscriptions to your Shopify App Pricing plans. If you'd like to join this Early Access preview, <a href="https://docs.google.com/forms/d/e/1FAIpQLSfu5wET7HaYLwdlkX2SNhGeRLvhccohTLlXb7hcH1fvyQdo_g/viewform?usp=dialog" target="_blank" class="body-link">enter your information on this form</a>.</p>
</div> ]]></description>
    <pubDate>Tue, 07 Jul 2026 16:00:00 +0000</pubDate>
    <atom:published>2026-07-07T16:00:00.000Z</atom:published>
    <atom:updated>2026-07-17T14:09:00.000Z</atom:updated>
    <category>Platform</category>
    <category>Update</category>
    <link>https://shopify.dev/changelog/prepare-your-app-for-migration-to-shopify-app-pricing</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/prepare-your-app-for-migration-to-shopify-app-pricing</guid>
  </item>
  <item>
    <title>Shopify Flow: Changes to Action extensions result in fewer breaking changes</title>
    <description><![CDATA[ <div class=""><p>Your server-side code now has more control over how breaking changes to an action’s configuration fields are handled. Instead of failing validation when there’s a field mismatch, workflows that use older versions of an action will continue to execute, and Shopify will still send the request to the configured endpoint URL. Your server can then decide how to handle schema differences: for example, it can set default values for new required fields, ignore fields that were removed, or reject the request.</p>
<h2>Why it’s changing</h2>
<p>Previously, any change to an action’s configuration fields was treated as a breaking change in merchant workflows. Runtime validation would fail, and Shopify wouldn’t send the request to the partner server. For example, if a new required field was added or an existing field was removed, any workflows using an older version of that action would always fail and never reach your endpoint.</p>
<p>With this change, those workflows continue to run, and your endpoint receives the request even when the payload is based on an older configuration.</p>
<h2>What you need to do</h2>
<p>Your action’s endpoint may now receive payloads that don’t exactly match the action’s current configuration, but instead match a previous version that merchants are still using in their workflows. Make sure your endpoint can safely handle:</p>
<ul>
<li>Missing fields that have become required in newer versions</li>
<li>Extra fields that existed in older versions but have since been removed</li>
<li>Any other unexpected fields or schema differences</li>
</ul>
<p>Typical strategies include applying sensible defaults for missing fields, ignoring unknown or legacy fields, or returning a clear error response when the payload can’t be processed safely.</p>
<p>For more details on how requests are sent and executed, see <a href="https://shopify.dev/docs/apps/build/flow/actions/endpoints#flow-action-execution" target="_blank" class="body-link">Flow action execution</a>.</p>
</div> ]]></description>
    <pubDate>Tue, 07 Jul 2026 16:00:00 +0000</pubDate>
    <atom:published>2026-07-07T16:00:00.000Z</atom:published>
    <atom:updated>2026-07-07T20:02:19.000Z</atom:updated>
    <category>Tools</category>
    <category>Update</category>
    <category>2026-07</category>
    <link>https://shopify.dev/changelog/shopify-flow-changes-to-action-extensions-result-in-fewer-breaking-changes</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/shopify-flow-changes-to-action-extensions-result-in-fewer-breaking-changes</guid>
  </item>
  <item>
    <title>Shopify Flow: Action runtime URLs now update automatically</title>
    <description><![CDATA[ <div class=""><p>Shopify Flow now resolves an action’s <code>runtime_url</code> on every execution. When the <code>runtime_url</code> is changed and the app is redeployed, the new URL is automatically used by existing workflows the next time they run. Merchants no longer need to edit or re-save their workflows to use the updated URL.</p>
<p>During local development, when you use <code>shopify app dev</code>, the <code>runtime_url</code> is also updated automatically in any development shops that have workflows using the action. This mirrors the behavior in production.</p>
<h2>Why it’s changing</h2>
<p>Previously, the <code>runtime_url</code> for a Shopify Flow action was hard-coded into the workflow at the time it was activated. As a result, changes to an extension’s <code>runtime_url</code> only took effect after a merchant reactivated (re-saved) the affected workflow. Because merchants might not do this frequently, existing workflows could continue calling an outdated <code>runtime_url</code>.</p>
<h2>What you need to do</h2>
<p>No action is required. However, if you previously relied on an action’s <code>runtime_url</code> remaining fixed for a workflow until it was reactivated, be aware that updates now propagate to existing workflows automatically.</p>
<p>For more details, see <a href="https://shopify.dev/docs/apps/build/flow/actions/endpoints" target="_blank" class="body-link">Create Flow action endpoints</a>.</p>
</div> ]]></description>
    <pubDate>Tue, 07 Jul 2026 16:00:00 +0000</pubDate>
    <atom:published>2026-07-07T16:00:00.000Z</atom:published>
    <atom:updated>2026-07-07T20:05:18.000Z</atom:updated>
    <category>Tools</category>
    <category>Update</category>
    <category>2026-07</category>
    <link>https://shopify.dev/changelog/shopify-flow-action-runtime-urls-now-update-automatically</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/shopify-flow-action-runtime-urls-now-update-automatically</guid>
  </item>
  <item>
    <title>Updated App Store Requirements: 1.3 Always Use Honest and Transparent Review Practices</title>
    <description><![CDATA[ <div class=""><p>All apps published to Shopify’s App Store are subject to policy 1.3 “Always use honest and transparent review practices”.</p>
<p><strong>What’s changing:</strong>
The <a href="https://shopify.dev/docs/apps/launch/shopify-app-store/app-store-requirements#always-use-honest-and-transparent-review-practices" target="_blank" class="body-link">Shopify App Store requirements policy 1.3</a> further clarifies our enforcement on the existing <a href="https://www.shopify.com/ca/partners/terms" target="_blank" class="body-link">Partner Program Agreement</a> Section C.2.1 about reviews in Shopify’s App Store. </p>
<ul>
<li><strong>Incentivizing reviews:</strong> While incentivizing reviews has always been against policy, we’re further clarifying how we enforce it. Developers found to be incentivizing reviews may face consequences such as the removal of a portion of reviews, demotion or delisting of your app, or termination of your Partner account.</li>
<li><strong>Review trust:</strong> We're making adjustments to our logic to evalulate reviews. Going forward, only reviews that meet our trust standards will appear publicly. Reviews that don’t meet this standard will be unpublished, and may be published automatically once they meet the standards.</li>
</ul>
<p><strong>Please make sure your app is in compliance by:</strong></p>
<ul>
<li>Using the <a href="https://shopify.dev/docs/api/app-home/apis/user-interface-and-interactions/reviews-api" target="_blank" class="body-link">Reviews API</a> when possible to collect authentic reviews from your users</li>
<li>Asking for reviews only in neutral language. Offering any incentives within or outside the app is not allowed.</li>
</ul>
<p>To learn more, see the <a href="https://shopify.dev/docs/apps/launch/shopify-app-store/app-store-requirements#always-use-honest-and-transparent-review-practices" target="_blank" class="body-link">Shopify App Store Requirements</a>.</p>
</div> ]]></description>
    <pubDate>Mon, 06 Jul 2026 16:30:00 +0000</pubDate>
    <atom:published>2026-07-06T16:30:00.000Z</atom:published>
    <atom:updated>2026-07-17T15:09:56.000Z</atom:updated>
    <category>App store</category>
    <category>Update</category>
    <link>https://shopify.dev/changelog/updated-app-store-requirements-13-always-use-honest-and-transparent-review-practices</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/updated-app-store-requirements-13-always-use-honest-and-transparent-review-practices</guid>
  </item>
  <item>
    <title>Strengthening trust in App Store reviews</title>
    <description><![CDATA[ <div class=""><p>Reviews on the Shopify App Store are foundational to a fair marketplace. They're how merchants find the right apps, and how developers earn trust for the products they build. Reviews are one of the most important ways merchants decide which apps to trust. To keep that signal honest, we're making two changes to how we handle review incentivization and untrusted reviews. We're announcing both together. Here's what Partners need to know.</p>
<h2>1. A dedicated policy on review incentivization</h2>
<p><strong>What it is:</strong> Offering, unlocking, or withholding app features in exchange for a merchant leaving a review.</p>
<p><strong>What's changing:</strong> Rules on this practice previously lived within the Partner Program Agreement, which made them easy to overlook. We're introducing a dedicated App Store requirement on review incentivization with clear consequences.</p>
<p><strong>The consequence:</strong> When an app is found to be incentivizing reviews, we'll remove a significant portion of its reviews. We've already identified apps engaged in this practice, and we'll be enforcing this policy as soon as the change goes live.</p>
<h2>2. Stronger untrusted review detection</h2>
<p><strong>What it is:</strong> Reviews that don't come from genuine users of an app. These are posted to inflate an app's ranking or to harm a competitor's.</p>
<p><strong>What's changing:</strong> We're expanding the set of signals we use to determine whether a review is authentic. Because we're applying these signals to existing reviews as well as new ones, a meaningful number of reviews that don't meet our authenticity bar will be unpublished over the coming weeks.</p>
<p><strong>What to expect:</strong> Because untrusted reviewers often leave reviews across many listings to appear more legitimate, some genuine apps might see reviews unpublished too. This isn't a reflection of wrongdoing on your part, but it's a result of removing the untrustworthy activity connected to those reviews. Our goal is to ensure that the reviews that remain carry more weight. Unpublishing will roll out gradually as the backfill completes.</p>
<h2>Why now</h2>
<p>As the Shopify App Store grows, so does our responsibility to protect it. Untrusted and incentivized reviews undermine the trust merchants place in the review systems, and they create an uneven playing field for developers who play by the rules. A trustworthy App Store benefits everyone who builds honestly. These changes make our standards clearer, our enforcement more consistent, and the reviews merchants rely on more genuine.</p>
<h2>What you should do</h2>
<p>As you collect reviews, make sure you're doing so honestly and fairly. These are some best practices we recommend:</p>
<ul>
<li><strong>Use the <a href="https://shopify.dev/docs/api/app-home/apis/user-interface-and-interactions/reviews-api" target="_blank" class="body-link">Reviews API</a></strong> to request reviews from merchants who actually use your app.  </li>
<li><strong>Ask in neutral language at the right moment.</strong> A simple &quot;How's your experience? Leave a review&quot; after the merchant has used your app is fine. Offering anything in return is not.  </li>
<li><strong>Reply to negative reviews</strong> instead of trying to bury them. Merchants value developers who engage with feedback.</li>
</ul>
<p>Reach <a href="https://help.shopify.com/en/partners/help-support/getting-support" target="_blank" class="body-link">out to Support</a> with any concerns or if you feel that trusted reviews have been removed. </p>
<h2>What's next</h2>
<p>This is the start of a broader investment in App Store quality. We're continuing to improve  automated detection, strengthen policy enforcement, and strengthen the overall health of a trustworthy ecosystem.</p>
<p>The Shopify App Store should be a place where the best apps win. That's what we're building toward.</p>
</div> ]]></description>
    <pubDate>Mon, 06 Jul 2026 16:00:00 +0000</pubDate>
    <atom:published>2026-07-06T16:00:00.000Z</atom:published>
    <atom:updated>2026-07-27T16:06:26.000Z</atom:updated>
    <category>App store</category>
    <category>Update</category>
    <link>https://shopify.dev/changelog/strengthening-trust-in-app-store-reviews</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/strengthening-trust-in-app-store-reviews</guid>
  </item>
  <item>
    <title>Customer Account API Customer.lastIncompleteCheckout and Checkout types removed in 2026-10</title>
    <description><![CDATA[ <div class=""><p>As of <a href="https://shopify.dev/docs/api/customer/latest" target="_blank" class="body-link">Customer Account API</a> version 2026-10, the deprecated <code>Customer.lastIncompleteCheckout</code> field is removed.</p>
<p>This also removes the now-unreachable Customer Account API <code>Checkout</code> type subtree, including:</p>
<ul>
<li><code>Checkout</code></li>
<li><code>Checkout.appliedGiftCards</code></li>
<li><code>AppliedGiftCard</code></li>
<li><code>AvailableShippingRates</code></li>
<li><code>CheckoutLineItem</code></li>
<li><code>CheckoutLineItemConnection</code></li>
<li><code>CheckoutLineItemEdge</code></li>
<li><code>ShippingRate</code></li>
</ul>
<p>The <code>Customer.lastIncompleteCheckout</code> field was previously deprecated and returned <code>null</code>. This change removes stale Checkout Classic schema from the Customer Account API.</p>
<h3>Action required</h3>
<p>If your app queries <code>Customer.lastIncompleteCheckout</code> or any nested fields on the returned <code>Checkout</code> object, update your queries before upgrading to API version 2026-10.</p>
<p>Remove selections such as:</p>
<pre><code class="language-graphql">customer {
  lastIncompleteCheckout {
    id
    appliedGiftCards {
      id
    }
  }
}
</code></pre>
<p>There is no replacement field in the Customer Account API.</p>
<p>If you need active cart or checkout state for a buyer storefront experience, use <a href="https://shopify.dev/docs/api/storefront/latest/objects/Cart" target="_blank" class="body-link">Storefront API cart flows</a> instead. If you need completed customer purchase history, use the Customer Account API <a href="https://shopify.dev/docs/api/customer/latest/objects/Customer#field-Customer.fields.orders" target="_blank" class="body-link"><code>Customer.orders</code></a> field.</p>
</div> ]]></description>
    <pubDate>Mon, 06 Jul 2026 16:00:00 +0000</pubDate>
    <atom:published>2026-07-06T16:00:00.000Z</atom:published>
    <atom:updated>2026-07-06T16:00:00.000Z</atom:updated>
    <category>Action Required</category>
    <category>API</category>
    <category>Breaking API Change</category>
    <category>Customer Account API</category>
    <category>2026-10</category>
    <link>https://shopify.dev/changelog/customer-account-api-last-incomplete-checkout-and-checkout-types-removed</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/customer-account-api-last-incomplete-checkout-and-checkout-types-removed</guid>
  </item>
  <item>
    <title>Markets APIs now support MarketRegionSubdivision </title>
    <description><![CDATA[ <div class=""><p><strong>Sub-region Markets are available in the Admin GraphQL API <code>2026-07</code></strong></p>
<p>Apps using Admin GraphQL <code>2026-07</code> can encounter Markets configured with country-subdivision regions, such as states and provinces as merchants upgrade to market-driven shipping.  Apps can get more informtion about market-drive shipping feature preview  <a href="https://shopify.dev/docs/apps/build/orders-fulfillment/market-driven-shipping/upgrade-your-app" target="_blank" class="body-link">shipping upgrade guide</a></p>
<p>Use <code>MarketRegionSubdivision</code> as the stable country-subdivision region type, and read sub-region membership through <code>market.conditions.regionsCondition.regions</code>. Do not use deprecated <code>market.regions</code> as the source of truth for sub-region membership, because it may omit subdivision regions.</p>
<p>Sub-region Markets support shipping first. Other configurations including Discounts, Catalogs, Theme contextualization, Market metafields, are not yet supported. Unsupported API paths will return validation errors instead of allowing unsupported configurations.</p>
</div> ]]></description>
    <pubDate>Fri, 03 Jul 2026 16:00:00 +0000</pubDate>
    <atom:published>2026-07-03T16:00:00.000Z</atom:published>
    <atom:updated>2026-07-06T12:35:27.000Z</atom:updated>
    <category>API</category>
    <category>Update</category>
    <link>https://shopify.dev/changelog/markets-apis-now-support-marketregionsubdivision</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/markets-apis-now-support-marketregionsubdivision</guid>
  </item>
  <item>
    <title>OrderDisplayFulfillmentStatus now returns FULFILLMENT_NOT_REQUIRED for orders with no items to fulfill</title>
    <description><![CDATA[ <div class=""><p>As of API version 2026-10, the <code>OrderDisplayFulfillmentStatus</code> enum can return a new value: <code>FULFILLMENT_NOT_REQUIRED</code>. It is returned for orders that are not fulfilled but have no items remaining to fulfill — for example, an order that was fully cancelled or fully refunded before any items were fulfilled. Previously, these orders returned <code>UNFULFILLED</code>.</p>
<p>This is a backward-compatible, additive change: integrations that already handle unrecognized enum values gracefully don't need to do anything. As with all GraphQL enums, treat the set of values as open — new values may be added in future versions.</p>
<p><strong>What's changing</strong></p>
<ul>
<li><code>Order.displayFulfillmentStatus</code> (and any field typed as <code>OrderDisplayFulfillmentStatus</code>) may return <code>FULFILLMENT_NOT_REQUIRED</code> on API version 2026-10 and later.</li>
<li>This value represents an order whose remaining fulfillable quantity is zero — for example, all line item quantities were removed through order edits, or the order was closed by cancellation.</li>
<li>API versions earlier than 2026-10 are unchanged and continue to return <code>UNFULFILLED</code> for these orders.</li>
</ul>
<p><strong>Why</strong>
The <code>UNFULFILLED</code> status was misleading for orders that have nothing left to fulfill. <code>FULFILLMENT_NOT_REQUIRED</code> makes the order's true state clear to merchants and to the apps that read it.</p>
<p><strong>What you may need to do</strong></p>
<ul>
<li>If your app exhaustively maps <code>OrderDisplayFulfillmentStatus</code> values (switch statements, status-to-label/badge maps, or generated types), add handling for <code>FULFILLMENT_NOT_REQUIRED</code> when you adopt 2026-10.</li>
<li>If your app branches on or filters by <code>UNFULFILLED</code>, note that orders with no fulfillable items report <code>FULFILLMENT_NOT_REQUIRED</code> instead on 2026-10 and later.</li>
</ul>
</div> ]]></description>
    <pubDate>Fri, 03 Jul 2026 16:00:00 +0000</pubDate>
    <atom:published>2026-07-03T16:00:00.000Z</atom:published>
    <atom:updated>2026-07-03T16:00:00.000Z</atom:updated>
    <category>API</category>
    <category>Update</category>
    <category>Admin GraphQL API</category>
    <category>2026-10</category>
    <link>https://shopify.dev/changelog/orderdisplayfulfillmentstatus-now-returns-fulfillmentnotrequired</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/orderdisplayfulfillmentstatus-now-returns-fulfillmentnotrequired</guid>
  </item>
  <item>
    <title>Deprecating the useBuyerJourneyIntercept API on checkout UI extensions</title>
    <description><![CDATA[ <div class=""><p>Starting in version <code>2026-07</code>, the <a href="https://shopify.dev/docs/api/checkout-ui-extensions/latest/target-apis/checkout-apis/buyer-journey-api#useBuyerJourneyIntercept" target="_blank" class="body-link"><code>useBuyerJourneyIntercept</code></a> hook on checkout UI extensions, and the <a href="https://shopify.dev/docs/apps/build/checkout/capabilities#block-progress" target="_blank" class="body-link"><code>block_progress</code></a> capability it depends on, are deprecated. Existing extensions will continue to work on current and prior API versions, but this API will be <strong>removed in a future version</strong>, so you should plan to migrate.</p>
<p>The following are deprecated:</p>
<ul>
<li><code>useBuyerJourneyIntercept</code> (Preact hook) in checkout UI extensions</li>
<li>The <code>block_progress</code> capability in the extension’s <code>shopify.extension.toml</code> configuration file</li>
</ul>
<p>If you currently use <code>useBuyerJourneyIntercept</code> to enforce merchant business rules, migrate to a <a href="https://shopify.dev/docs/api/functions/latest/cart-and-checkout-validation" target="_blank" class="body-link">cart and checkout validation Function</a>. These Functions run server-side and apply your rules consistently across all checkout surfaces, including express wallets and agentic checkout.</p>
<p>If you use <code>useBuyerJourneyIntercept</code> to reject discount codes, migrate that logic to the discount Function API, which <a href="https://shopify.dev/changelog/discount-rejection-support-for-discount-functions" target="_blank" class="body-link">now supports rejecting discount codes with a custom message</a>.</p>
<p>To learn more and if you've got a use case that's keeping you from moving to Shopify Functions: <a href="https://community.shopify.dev/t/the-buyer-journey-intercept-api-is-now-deprecated/35930" target="_blank" class="body-link">https://community.shopify.dev/t/the-buyer-journey-intercept-api-is-now-deprecated/35930</a>.</p>
</div> ]]></description>
    <pubDate>Thu, 02 Jul 2026 16:00:00 +0000</pubDate>
    <atom:published>2026-07-02T16:00:00.000Z</atom:published>
    <atom:updated>2026-07-10T13:20:06.000Z</atom:updated>
    <category>Action Required</category>
    <category>Polaris</category>
    <category>Deprecation announcement</category>
    <category>2026-07</category>
    <link>https://shopify.dev/changelog/deprecating-the-usebuyerjourneyintercept-api-on-checkout-ui-extensions</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/deprecating-the-usebuyerjourneyintercept-api-on-checkout-ui-extensions</guid>
  </item>
  <item>
    <title>Shop Minis May June 2026 update</title>
    <description><![CDATA[ <div class=""><h2>New Features</h2>
<h3>Product variant intents</h3>
<p>The React SDK added typed product variant intent hooks for selecting variants, adding variants to cart, and sending buyers to express checkout:</p>
<ul>
<li><code>useSelectVariant</code> wraps <code>select:shopify/ProductVariant</code>.</li>
<li><code>useAddToCart</code> wraps <code>add_to_cart:shopify/ProductVariant</code>.</li>
<li><code>useBuyNow</code> wraps <code>buy_now:shopify/ProductVariant</code>.</li>
</ul>
<p>These hooks can open the native Shop variant selector sheet over the Mini WebView when a Mini has a product ID but needs the buyer to pick a variant or quantity. Results distinguish successful actions, user dismissal, host errors, navigation to PDP, and referral-product handoffs.</p>
<p><strong>Usage:</strong></p>
<pre><code class="language-tsx">const {addToCart} = useAddToCart()

const result = await addToCart({productId})

if (result.code === 'ok') {
  switch (result.data.outcome) {
    case 'added_to_cart':
      break
    case 'navigated_to_product':
      break
    case 'redirected_to_product':
      break
  }
}
</code></pre>
<h3>Build verification during submit</h3>
<p>The CLI now runs Minis build verification as part of <code>submit</code>. The verification system was also split into per-check orchestration with human-readable progress and JSON output support. Current checks cover dependency validation, ESLint disables, ESLint, TypeScript, build output, and manifest validation.</p>
<h3>Scoped hook setup warnings</h3>
<p>The CLI now warns when a Mini uses scoped SDK hooks before completing the required setup. This gives partners earlier feedback when code uses features that depend on declared scopes or account setup.</p>
</div> ]]></description>
    <pubDate>Wed, 01 Jul 2026 20:05:00 +0000</pubDate>
    <atom:published>2026-07-01T20:05:00.000Z</atom:published>
    <atom:updated>2026-07-01T20:05:00.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <category>Shop Minis</category>
    <link>https://shopify.dev/changelog/shop-minis-may-june-2026-update</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/shop-minis-may-june-2026-update</guid>
  </item>
  <item>
    <title>Market-driven shipping now available in feature preview</title>
    <description><![CDATA[ <div class=""><p>Market-driven shipping moves merchant-owned shipping configuration out of delivery profiles and into Markets. Merchants will attach shipping options directly to each market, and then vary rates by product and location conditions within a single option. This makes checkout rate behavior more predictable and easier to understand.</p>
<p>What this means for your app:</p>
<ul>
<li>Merchant shipping configuration (today’s merchant delivery profiles) moves from the delivery profile API to the Markets API.</li>
<li>App delivery profiles (delivery profiles created by apps) keep using the delivery profile API.</li>
<li>App-provided rates (rates defined within app delivery profiles) still appear alongside merchant rates in the new experience.</li>
<li>App delivery profiles are getting more powerful: they can now target all products instead of just a subset, and adding a product to an app profile will no longer impact the merchant configuration.</li>
<li>If your app reads, creates, or updates merchant shipping settings through the delivery profile API, you’ll need to update it. Market-driven shipping will start rolling out to merchants on October 1, 2026, and all merchants will be on it by July 1, 2027.</li>
</ul>
<p>The feature preview is available today. Create a new development store, enable the feature preview, and validate your existing integration and rate logic.</p>
<p>To learn how market-driven shipping works and how to upgrade your app see <a href="https://shopify.dev/docs/apps/build/orders-fulfillment/market-driven-shipping/feature-preview" target="_blank" class="body-link">Market-driven shipping feature preview</a>.</p>
</div> ]]></description>
    <pubDate>Wed, 01 Jul 2026 19:00:00 +0000</pubDate>
    <atom:published>2026-07-01T19:00:00.000Z</atom:published>
    <atom:updated>2026-07-01T19:00:00.000Z</atom:updated>
    <category>Action Required</category>
    <category>API</category>
    <category>New</category>
    <category>Admin GraphQL API</category>
    <category>2026-07</category>
    <link>https://shopify.dev/changelog/market-driven-shipping-now-available-in-feature-preview</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/market-driven-shipping-now-available-in-feature-preview</guid>
  </item>
  <item>
    <title>Draft order deposit fields are now available in the GraphQL Admin API and Customer Account API</title>
    <description><![CDATA[ <div class=""><p>As of the 2026-07 API version, draft order deposit fields are available in the GraphQL Admin API and Customer Account API.</p>
<p>Apps can now set a deposit when creating or updating a draft order with <a href="https://shopify.dev/docs/api/admin-graphql/2026-07/input-objects/DraftOrderInput#fields-deposit" target="_blank" class="body-link"><code>DraftOrderInput.deposit</code></a> in the GraphQL Admin API. This supports draft order flows where part of the payment is due at checkout and the remaining balance is due later, such as due-on-fulfillment payment terms.</p>
<p>The <a href="https://shopify.dev/docs/api/customer/2026-07/queries/draftOrder#returns-DraftOrder.fields.deposit" target="_blank" class="body-link">Customer Account API</a> also exposes read-only deposit information on draft orders, including the amount due now and the amount due later.</p>
<p>This feature is available to Shopify Plus stores.</p>
</div> ]]></description>
    <pubDate>Wed, 01 Jul 2026 16:00:00 +0000</pubDate>
    <atom:published>2026-07-01T16:00:00.000Z</atom:published>
    <atom:updated>2026-07-01T16:00:00.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <category>Admin GraphQL API</category>
    <category>Customer Accounts</category>
    <category>2026-07</category>
    <link>https://shopify.dev/changelog/draft-order-deposit-fields-now-available-in-the-admin-and-customer-account-graphql-apis</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/draft-order-deposit-fields-now-available-in-the-admin-and-customer-account-graphql-apis</guid>
  </item>
  <item>
    <title>Deprecation of cumulative marketing engagements</title>
    <description><![CDATA[ <div class=""><p>The <code>isCumulative</code> argument to the <code>marketingEngagementCreate</code> mutation is being deprecated, defaulting to <code>false</code>. Please update your integration to send non-cumulative engagements, as needed. Existing activities that have been sending cumulative metrics can migrate to non-cumulative at any time.</p>
</div> ]]></description>
    <pubDate>Wed, 01 Jul 2026 16:00:00 +0000</pubDate>
    <atom:published>2026-07-01T16:00:00.000Z</atom:published>
    <atom:updated>2026-07-01T16:00:00.000Z</atom:updated>
    <category>Action Required</category>
    <category>API</category>
    <category>Deprecation announcement</category>
    <category>Admin GraphQL API</category>
    <category>2026-07</category>
    <link>https://shopify.dev/changelog/deprecation-of-cumulative-marketing-engagements</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/deprecation-of-cumulative-marketing-engagements</guid>
  </item>
  <item>
    <title>`lineItem` field added to the `GiftCard` object</title>
    <description><![CDATA[ <div class=""></div> ]]></description>
    <pubDate>Wed, 01 Jul 2026 16:00:00 +0000</pubDate>
    <atom:published>2026-07-01T16:00:00.000Z</atom:published>
    <atom:updated>2026-07-15T16:57:08.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <category>Admin GraphQL API</category>
    <category>2026-07</category>
    <link>https://shopify.dev/changelog/new-lineitem-field-on-the-giftcard-graphql-object</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/new-lineitem-field-on-the-giftcard-graphql-object</guid>
  </item>
  <item>
    <title>Discount application information now available for draft orders on the Customer Account API</title>
    <description><![CDATA[ <div class=""><p>As of GraphQL Customer Account API version 2026-07, draft orders now expose discount applications.</p>
<p>You can use the new <a href="https://shopify.dev/docs/api/customer/2026-07/objects/DraftOrder#field-DraftOrder.fields.discountApplications" target="_blank" class="body-link"><code>discountApplications</code></a> field on DraftOrder to query discounts applied to a draft order, and the new <a href="https://shopify.dev/docs/api/customer/2026-07/objects/DraftOrderLineItem#field-DraftOrderLineItem.fields.discountAllocations" target="_blank" class="body-link"><code>discountAllocations</code></a> field on <code>DraftOrderLineItem</code> to query how discounts are allocated across line items.</p>
<p> For example:</p>
<pre><code class="language-graphql">   query DraftOrderDiscounts($id: ID!) {
     draftOrder(id: $id) {
       discountApplications(first: 10) {
         nodes {
           __typename
           ... on DiscountCodeApplication {
             code
           }
           ... on ManualDiscountApplication {
             title
           }
           allocationMethod
           targetSelection
           targetType
           value {
             ... on MoneyV2 {
               amount
               currencyCode
             }
             ... on PricingPercentageValue {
               percentage
             }
           }
         }
       }
       lineItems(first: 10) {
         nodes {
           title
           discountAllocations {
             allocatedAmount {
               amount
               currencyCode
             }
             discountApplication {
               __typename
             }
           }
         }
       }
     }
   }
</code></pre>
<p> Use these fields to understand which discounts apply to a draft order and how those discounts affect individual draft order line items.</p>
</div> ]]></description>
    <pubDate>Wed, 01 Jul 2026 16:00:00 +0000</pubDate>
    <atom:published>2026-07-01T16:00:00.000Z</atom:published>
    <atom:updated>2026-07-09T21:51:56.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <category>Customer Account API</category>
    <category>2026-07</category>
    <link>https://shopify.dev/changelog/discount-application-information-now-available-for-draft-orders-on-the-customer-account-api</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/discount-application-information-now-available-for-draft-orders-on-the-customer-account-api</guid>
  </item>
  <item>
    <title>`discountedUnitPrice` on `DraftOrderLineItem` Customer Account API deprecation</title>
    <description><![CDATA[ <div class=""><p>The <a href="https://shopify.dev/docs/api/customer/2026-04/objects/DraftOrderLineItem#field-DraftOrderLineItem.fields.discountedUnitPrice" target="_blank" class="body-link"><code>discountedUnitPrice</code></a> field on the <a href="https://shopify.dev/docs/api/customer/latest/objects/DraftOrderLineItem#top" target="_blank" class="body-link"><code>DraftOrderLineItem</code></a> object in the Customer Account API is now deprecated.</p>
<p>Use <a href="https://shopify.dev/docs/api/customer/2026-07/objects/DraftOrderLineItem#field-DraftOrderLineItem.fields.approximateDiscountedUnitPrice" target="_blank" class="body-link"><code>approximateDiscountedUnitPrice</code></a> instead. This new field calculates the discounted total divided by the quantity, resulting in an approximate per-unit price reduction. Update your queries to use <code>approximateDiscountedUnitPrice</code>.</p>
</div> ]]></description>
    <pubDate>Wed, 01 Jul 2026 16:00:00 +0000</pubDate>
    <atom:published>2026-07-01T16:00:00.000Z</atom:published>
    <atom:updated>2026-07-01T16:00:00.000Z</atom:updated>
    <category>API</category>
    <category>Deprecation announcement</category>
    <category>Customer Account API</category>
    <category>2026-07</category>
    <link>https://shopify.dev/changelog/discountedunitprice-on-draftorderlineitem-customer-account-api-deprecation</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/discountedunitprice-on-draftorderlineitem-customer-account-api-deprecation</guid>
  </item>
  <item>
    <title>`BusinessEntity` now exposes `legalEntityId` in the GraphQL Admin API</title>
    <description><![CDATA[ <div class=""><p>As of API version <code>2026-07</code>, the <code>BusinessEntity</code> type in the GraphQL Admin API includes a new <code>legalEntityId</code> field. This field returns the stable Central Legal Entity ID from Shopify's Organizations Platform, giving Partners a consistent identifier for the same legal entity across multiple shops, markets, and sales channels.</p>
<h2>What's new</h2>
<p>The <code>BusinessEntity</code> type now includes:</p>
<ul>
<li><code>legalEntityId</code> (<code>BigInt</code>, nullable): The stable organization-level legal entity identifier. This ID is consistent across all shops belonging to the same legal entity, enabling partners to recognize the same underlying company regardless of how many shops or markets it operates.</li>
</ul>
<p>This field returns <code>null</code> when the business entity has no backing Central Legal Entity or when the legal entity does not have a stable external ID.</p>
<h2>Example query</h2>
<pre><code class="language-graphql">query {
  businessEntity(id: &quot;gid://shopify/BusinessEntity/123456&quot;) {
    id
    legalEntityId
    companyName
    displayName
  }
}
</code></pre>
<h2>Example response</h2>
<pre><code class="language-json">{
  &quot;data&quot;: {
    &quot;businessEntity&quot;: {
      &quot;id&quot;: &quot;gid://shopify/BusinessEntity/123456&quot;,
      &quot;legalEntityId&quot;: &quot;223432432&quot;,
      &quot;companyName&quot;: &quot;Acme Corporation&quot;,
      &quot;displayName&quot;: &quot;Acme US&quot;
    }
  }
}
</code></pre>
<h2>Why this matters</h2>
<p>Previously, <code>BusinessEntity.id</code> was scoped to individual shops, meaning the same company operating multiple shops would appear with different IDs. The new <code>legalEntityId</code> provides a single, stable identifier at the organization level that Partners can use to:</p>
<ul>
<li>Map a merchant's legal entity to a company code in their own systems</li>
<li>Consistently identify the same company across multiple shops and markets</li>
<li>Correlate legal entity data between the GraphQL Admin API and tax webhook payloads (where the same identifier appears as <code>merchant_business_entity.legal_entity_id</code>)</li>
</ul>
<h2>API version</h2>
<p>This field is available starting in API version <code>2026-07</code> and in <code>unstable</code>.</p>
</div> ]]></description>
    <pubDate>Wed, 01 Jul 2026 16:00:00 +0000</pubDate>
    <atom:published>2026-07-01T16:00:00.000Z</atom:published>
    <atom:updated>2026-07-01T16:00:00.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <category>Admin GraphQL API</category>
    <category>2026-07</category>
    <link>https://shopify.dev/changelog/businessentity-now-exposes-legalentityid-in-the-admin-api</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/businessentity-now-exposes-legalentityid-in-the-admin-api</guid>
  </item>
  <item>
    <title>Merchant-owned delivery profile APIs are deprecated for market-driven shipping</title>
    <description><![CDATA[ <div class=""><h2>What's changing</h2>
<p>We’re moving merchant-owned shipping configuration from legacy delivery profiles to Markets as part of market-driven shipping, a new model where shipping is configured per Market.</p>
<p>When a shop uses market-driven shipping, the legacy delivery profile fields and mutations in the Admin GraphQL API no longer represent the shop’s live merchant-owned shipping configuration. Reads may return a stale snapshot of the legacy configuration, and writes may succeed without errors but will not update the merchant’s live shipping settings.</p>
<p>This affects merchant-owned usage of the following Admin GraphQL delivery profile APIs:</p>
<ul>
<li><code>deliveryProfile</code></li>
<li><code>deliveryProfiles</code></li>
<li><code>deliveryProfilesCount</code></li>
<li><code>deliveryProfileLocationGroup</code></li>
<li><code>deliveryProfileLocationGroups</code></li>
<li><code>deliveryProfileCreate</code></li>
<li><code>deliveryProfileUpdate</code></li>
<li><code>deliveryProfileRemove</code></li>
</ul>
<p>App-owned delivery profiles aren’t affected and continue to function as before.</p>
<h2>What to do</h2>
<p>If your app currently reads or manages merchant-owned shipping configuration, you must follow the <a href="https://shopify.dev/docs/apps/build/orders-fulfillment/market-driven-shipping/upgrade-your-app" target="_blank" class="body-link">upgrade guide for market-driven shipping</a>. The guide explains how to:</p>
<ul>
<li>Detect shops that are using market-driven shipping.</li>
<li>Stop relying on merchant-owned delivery profile APIs for those shops.</li>
<li>Migrate to Contextual Product Feeds, app-owned delivery profiles, or Markets APIs, depending on your use case.</li>
</ul>
</div> ]]></description>
    <pubDate>Wed, 01 Jul 2026 13:00:00 +0000</pubDate>
    <atom:published>2026-07-01T13:00:00.000Z</atom:published>
    <atom:updated>2026-07-01T13:00:00.000Z</atom:updated>
    <category>Action Required</category>
    <category>API</category>
    <category>Deprecation announcement</category>
    <category>Admin GraphQL API</category>
    <category>2026-07</category>
    <link>https://shopify.dev/changelog/merchant-owned-delivery-profile-apis-are-deprecated-for-market-driven-shipping</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/merchant-owned-delivery-profile-apis-are-deprecated-for-market-driven-shipping</guid>
  </item>
  <item>
    <title>Market-driven shipping Admin API</title>
    <description><![CDATA[ <div class=""><p>Starting in API version 2026-07, the GraphQL Admin API supports market-driven shipping configuration. You can now configure shipping directly on a market, which helps apps support different shipping strategies for different markets without creating a separate shipping profile resource.</p>
<h2>What changed</h2>
<p>The <a href="https://shopify.dev/docs/api/admin-graphql/unstable/objects/Market" target="_blank" class="body-link"><code>Market</code></a> object now includes a <code>delivery</code> field for market delivery settings. Use <code>Market.delivery.shipping</code> to read the shipping configuration for a market.</p>
<p>Use the existing <code>marketCreate</code> and <code>marketUpdate</code> mutations to create, update, or remove a market's shipping configuration:</p>
<ul>
<li>Use <code>MarketCreateInput.delivery.shipping</code> to add shipping configuration when creating a market.  </li>
<li>Use <code>MarketUpdateInput.delivery.shipping</code> to update shipping configuration on an existing market.  </li>
<li>Use <code>MarketUpdateInput.delivery.removeShipping</code> to remove a market-level shipping configuration so the market inherits shipping from its parent.</li>
</ul>
<p>Shipping options are managed through <code>DeliveryOptionDefinitionCreateInput</code> and <code>DeliveryOptionDefinitionUpdateInput</code>. The API supports these option types:</p>
<ul>
<li><code>DeliveryFlatRateOptionDefinition</code> for fixed-price shipping options.  </li>
<li><code>DeliveryValueBasedOptionDefinition</code> for rates based on cart value.  </li>
<li><code>DeliveryWeightBasedOptionDefinition</code> for rates based on package weight.  </li>
<li><code>DeliveryCarrierCalculatedOptionDefinition</code> for rates calculated by carrier services.</li>
</ul>
<p>Each shipping option includes fields such as <code>currency</code> and <code>isActive</code>. You can optionally configure a free delivery threshold with <code>freeDeliveryMinimumValue</code>. Flat and value-based options can include one or more rate groups. Weight-based options include exactly one weight-based rate group, and carrier-calculated options include a single carrier-calculated rate group.</p>
<h2>What you can do</h2>
<ul>
<li>Configure shipping options for a specific market.  </li>
<li>Offer different flat, value-based, weight-based, or carrier-calculated rates by market.  </li>
<li>Restrict rate groups to specific product collections or origin locations.  </li>
<li>Unconfigured markets naturally  inherit shipping from their parents.  </li>
<li>Disable shipping for a market by setting <code>isEnabled</code> to <code>false</code>.</li>
</ul>
<h2>What you need to know</h2>
<ul>
<li>Queries require <code>read_markets</code> access.  </li>
<li>Mutations require both <code>read_markets</code> and <code>write_markets</code> access.  </li>
<li>A <code>null</code> value for <code>Market.delivery.shipping</code> means the market inherits shipping from its parent. For markets without a parent, shipping inherits the shop default of no shipping  </li>
<li><code>isEnabled: false</code> means customers in that market will not see shipping options at checkout. This also disables any app managed shipping options that may otherwise apply to this market.  </li>
<li>There are no root queries or standalone mutations for market shipping configuration. Read and write shipping configuration through <code>Market</code>, <code>marketCreate</code>, and <code>marketUpdate</code>.</li>
</ul>
<h2>Example query</h2>
<p>This query reads a market's shipping configuration, including whether shipping is enabled, how many active shipping options are configured, and the details for each flat-rate option.</p>
<pre><code>{
  market(id: &quot;gid://shopify/Market/123&quot;) {
    delivery {
      shipping {
        isEnabled
        activeOptionDefinitionsCount {
          count
        }
        optionDefinitions(first: 10) {
          nodes {
            __typename
            currency
            isActive
            freeDeliveryMinimumValue {
              amount
              currencyCode
            }
            ... on DeliveryFlatRateOptionDefinition {
              name
              rateGroups(first: 10) {
                nodes {
                  conditions {
                    collectionsCount {
                      count
                    }
                    originLocationsCount {
                      count
                    }
                  }
                  rate {
                    price {
                      amount
                      currencyCode
                    }
                    transitTimeMinSeconds
                    transitTimeMaxSeconds
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}
</code></pre>
<h2>Example mutation</h2>
<p>This mutation updates an existing market with shipping enabled and adds a standard flat-rate shipping option with a fixed price and estimated transit time.</p>
<pre><code>mutation {
  marketUpdate(
    id: &quot;gid://shopify/Market/123&quot;
    input: {
      delivery: {
        shipping: {
          isEnabled: true
          optionDefinitionsToCreate: [
            {
              flatRate: {
                name: &quot;Standard Delivery&quot;
                currency: USD
                rateGroups: [
                  {
                    rate: {
                      price: { amount: &quot;5.99&quot;, currencyCode: USD }
                      transitTimeMinSeconds: 432000
                      transitTimeMaxSeconds: 604800
                    }
                  }
                ]
              }
            }
          ]
        }
      }
    }
  ) {
    market {
      id
      delivery {
        shipping {
          isEnabled
          optionDefinitions(first: 10) {
            nodes {
              __typename
              currency
              isActive
            }
          }
        }
      }
    }
    userErrors {
      field
      message
    }
  }
}
</code></pre>
<h2>Example: Disable shipping for a market</h2>
<p>Use <code>isEnabled: false</code> when the market should keep its market-level shipping configuration, but not show shipping options at checkout.</p>
<pre><code>mutation {
  marketUpdate(
    id: &quot;gid://shopify/Market/123&quot;
    input: {
      delivery: {
        shipping: {
          isEnabled: false
        }
      }
    }
  ) {
    market {
      id
      delivery {
        shipping {
          isEnabled
        }
      }
    }
    userErrors {
      field
      message
    }
  }
}
</code></pre>
<h2>Example: Remove market-level shipping configuration</h2>
<p>Use <code>removeShipping: true</code> when the market should inherit shipping from its parent instead of using its own shipping configuration.</p>
<pre><code>mutation {
  marketUpdate(
    id: &quot;gid://shopify/Market/123&quot;
    input: {
      delivery: {
        removeShipping: true
      }
    }
  ) {
    market {
      id
      delivery {
        shipping {
          isEnabled
        }
      }
    }
    userErrors {
      field
      message
    }
  }
}
</code></pre>
<h2>Example: Add a value-based shipping option</h2>
<p>This mutation creates a shipping option where the rate depends on cart value.</p>
<pre><code>mutation {
  marketUpdate(
    id: &quot;gid://shopify/Market/123&quot;
    input: {
      delivery: {
        shipping: {
          optionDefinitionsToCreate: [
            {
              valueBased: {
                name: &quot;Cart Value Shipping&quot;
                currency: USD
                isActive: true
                rateGroups: [
                  {
                    rates: [
                      {
                        price: { amount: &quot;9.99&quot;, currencyCode: USD }
                        minValue: { amount: &quot;0.00&quot;, currencyCode: USD }
                        maxValue: { amount: &quot;49.99&quot;, currencyCode: USD }
                      }
                      {
                        price: { amount: &quot;0.00&quot;, currencyCode: USD }
                        minValue: { amount: &quot;50.00&quot;, currencyCode: USD }
                      }
                    ]
                  }
                ]
              }
            }
          ]
        }
      }
    }
  ) {
    market {
      id
    }
    userErrors {
      field
      message
    }
  }
}
</code></pre>
<h2>Example: Add a weight-based shipping option</h2>
<p>Weight-based options uses a similar form but can only take a single rate group. The rate group can contain weight-based rates.</p>
<pre><code>mutation {
  marketUpdate(
    id: &quot;gid://shopify/Market/123&quot;
    input: {
      delivery: {
        shipping: {
          optionDefinitionsToCreate: [
            {
              weightBased: {
                name: &quot;Weight-Based Shipping&quot;
                currency: USD
                isActive: true
                rateGroups: [
								  {
                    rates: [
                      {
                        price: { amount: &quot;12.99&quot;, currencyCode: USD }
                        minWeight: { value: 0, unit: POUNDS }
                      }
                    ]
                  }
							  ]
              }
            }
          ]
        }
      }
    }
  ) {
    market {
      id
    }
    userErrors {
      field
      message
    }
  }
}
</code></pre>
<h2>Example: Add a carrier-calculated shipping option</h2>
<p>Carrier-calculated options also takes only a single rate group that references an existing carrier service.</p>
<pre><code>mutation {
  marketUpdate(
    id: &quot;gid://shopify/Market/123&quot;
    input: {
      delivery: {
        shipping: {
          optionDefinitionsToCreate: [
            {
              carrierCalculated: {
                currency: USD
                isActive: true
                rateGroups: [
								  {
                    carrierServiceId: &quot;gid://shopify/DeliveryCarrierService/987&quot;
                    autoIncludeNewServices: true
                    percentageAdjustment: 10
                  }
							]
            }
          ]
        }
      }
    }
  ) {
    market {
      id
    }
    userErrors {
      field
      message
    }
  }
}
</code></pre>
<h2>Example: Update an existing flat-rate shipping option</h2>
<p>Use <code>optionDefinitionsToUpdate</code> with the option ID. For flat-rate options, you can also update individual rate groups.</p>
<pre><code>mutation {
  marketUpdate(
    id: &quot;gid://shopify/Market/123&quot;
    input: {
      delivery: {
        shipping: {
          optionDefinitionsToUpdate: [
            {
              flatRate: {
                id: &quot;gid://shopify/DeliveryFlatRateOptionDefinition/456&quot;
                name: &quot;Standard Delivery&quot;
                isActive: true
                rateGroupsToUpdate: [
                  {
                    id: &quot;gid://shopify/DeliveryFlatRateGroup/789&quot;
                    rate: {
                      price: { amount: &quot;6.99&quot;, currencyCode: USD }
                      transitTimeMinSeconds: 432000
                      transitTimeMaxSeconds: 604800
                    }
                  }
                ]
              }
            }
          ]
        }
      }
    }
  ) {
    market {
      id
    }
    userErrors {
      field
      message
    }
  }
}
</code></pre>
<h2>Example: Delete a shipping option</h2>
<p>Use <code>optionDefinitionsToDelete</code> with the shipping option ID.</p>
<pre><code>mutation {
  marketUpdate(
    id: &quot;gid://shopify/Market/123&quot;
    input: {
      delivery: {
        shipping: {
          optionDefinitionsToDelete: [
            &quot;gid://shopify/DeliveryFlatRateOptionDefinition/456&quot;
          ]
        }
      }
    }
  ) {
    market {
      id
    }
    userErrors {
      field
      message
    }
  }
}
</code></pre>
<h2>Related docs</h2>
<p>Core objects and interfaces:</p>
<ul>
<li><a href="https://shopify.dev/docs/api/admin-graphql/unstable/objects/Market" target="_blank" class="body-link"><code>Market</code></a>  </li>
<li><a href="https://shopify.dev/docs/api/admin-graphql/unstable/objects/MarketDeliveryConfigurations" target="_blank" class="body-link"><code>MarketDeliveryConfigurations</code></a>  </li>
<li><a href="https://shopify.dev/docs/api/admin-graphql/unstable/objects/ShippingConfiguration" target="_blank" class="body-link"><code>ShippingConfiguration</code></a>  </li>
<li><a href="https://shopify.dev/docs/api/admin-graphql/unstable/interfaces/DeliveryOptionDefinition" target="_blank" class="body-link"><code>DeliveryOptionDefinition</code></a>  </li>
<li><a href="https://shopify.dev/docs/api/admin-graphql/unstable/objects/DeliveryFlatRateOptionDefinition" target="_blank" class="body-link"><code>DeliveryFlatRateOptionDefinition</code></a>  </li>
<li><a href="https://shopify.dev/docs/api/admin-graphql/unstable/objects/DeliveryValueBasedOptionDefinition" target="_blank" class="body-link"><code>DeliveryValueBasedOptionDefinition</code></a>  </li>
<li><a href="https://shopify.dev/docs/api/admin-graphql/unstable/objects/DeliveryWeightBasedOptionDefinition" target="_blank" class="body-link"><code>DeliveryWeightBasedOptionDefinition</code></a>  </li>
<li><a href="https://shopify.dev/docs/api/admin-graphql/unstable/objects/DeliveryCarrierCalculatedOptionDefinition" target="_blank" class="body-link"><code>DeliveryCarrierCalculatedOptionDefinition</code></a></li>
</ul>
<p>Rate groups, rates, and conditions:</p>
<ul>
<li><a href="https://shopify.dev/docs/api/admin-graphql/unstable/interfaces/DeliveryOptionDefinitionRateGroup" target="_blank" class="body-link"><code>DeliveryOptionDefinitionRateGroup</code></a>  </li>
<li><a href="https://shopify.dev/docs/api/admin-graphql/unstable/objects/DeliveryFlatRateGroup" target="_blank" class="body-link"><code>DeliveryFlatRateGroup</code></a>  </li>
<li><a href="https://shopify.dev/docs/api/admin-graphql/unstable/objects/DeliveryValueBasedRateGroup" target="_blank" class="body-link"><code>DeliveryValueBasedRateGroup</code></a>  </li>
<li><a href="https://shopify.dev/docs/api/admin-graphql/unstable/objects/DeliveryWeightBasedRateGroup" target="_blank" class="body-link"><code>DeliveryWeightBasedRateGroup</code></a>  </li>
<li><a href="https://shopify.dev/docs/api/admin-graphql/unstable/objects/DeliveryCarrierCalculatedRateGroup" target="_blank" class="body-link"><code>DeliveryCarrierCalculatedRateGroup</code></a>  </li>
<li><a href="https://shopify.dev/docs/api/admin-graphql/unstable/interfaces/DeliveryRate" target="_blank" class="body-link"><code>DeliveryRate</code></a>  </li>
<li><a href="https://shopify.dev/docs/api/admin-graphql/unstable/objects/DeliveryRateGroupConditions" target="_blank" class="body-link"><code>DeliveryRateGroupConditions</code></a></li>
</ul>
<p>Mutations and inputs:</p>
<ul>
<li><a href="https://shopify.dev/docs/api/admin-graphql/unstable/mutations/marketCreate" target="_blank" class="body-link"><code>marketCreate</code></a>  </li>
<li><a href="https://shopify.dev/docs/api/admin-graphql/unstable/mutations/marketUpdate" target="_blank" class="body-link"><code>marketUpdate</code></a>  </li>
<li><a href="https://shopify.dev/docs/api/admin-graphql/unstable/input-objects/MarketCreateInput" target="_blank" class="body-link"><code>MarketCreateInput</code></a>  </li>
<li><a href="https://shopify.dev/docs/api/admin-graphql/unstable/input-objects/MarketUpdateInput" target="_blank" class="body-link"><code>MarketUpdateInput</code></a>  </li>
<li><a href="https://shopify.dev/docs/api/admin-graphql/unstable/input-objects/MarketDeliveryConfigurationsCreateInput" target="_blank" class="body-link"><code>MarketDeliveryConfigurationsCreateInput</code></a>  </li>
<li><a href="https://shopify.dev/docs/api/admin-graphql/unstable/input-objects/MarketDeliveryConfigurationsUpdateInput" target="_blank" class="body-link"><code>MarketDeliveryConfigurationsUpdateInput</code></a>  </li>
<li><a href="https://shopify.dev/docs/api/admin-graphql/unstable/input-objects/ShippingConfigurationCreateInput" target="_blank" class="body-link"><code>ShippingConfigurationCreateInput</code></a>  </li>
<li><a href="https://shopify.dev/docs/api/admin-graphql/unstable/input-objects/ShippingConfigurationUpdateInput" target="_blank" class="body-link"><code>ShippingConfigurationUpdateInput</code></a>  </li>
<li><a href="https://shopify.dev/docs/api/admin-graphql/unstable/input-objects/DeliveryOptionDefinitionCreateInput" target="_blank" class="body-link"><code>DeliveryOptionDefinitionCreateInput</code></a>  </li>
<li><a href="https://shopify.dev/docs/api/admin-graphql/unstable/input-objects/DeliveryOptionDefinitionUpdateInput" target="_blank" class="body-link"><code>DeliveryOptionDefinitionUpdateInput</code></a></li>
</ul>
</div> ]]></description>
    <pubDate>Wed, 01 Jul 2026 04:00:00 +0000</pubDate>
    <atom:published>2026-07-01T04:00:00.000Z</atom:published>
    <atom:updated>2026-07-01T04:00:00.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <category>Admin GraphQL API</category>
    <category>2026-07</category>
    <link>https://shopify.dev/changelog/market-driven-delivery-profiles-admin-api</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/market-driven-delivery-profiles-admin-api</guid>
  </item>
  <item>
    <title>Hydrogen now deploys to Vercel</title>
    <description><![CDATA[ <div class=""><p>The Hydrogen developer preview can now be deployed to Vercel in a few clicks. A new Deploy button creates a repo from the Next.js starter template, sets up a Vercel project, and builds it. No local setup required.</p>
<p>The template is a working Hydrogen storefront with the typed Storefront API client, cart, and product and collection pages already wired up. Add your store credentials from the Headless channel to connect your own products. You'll find it in the <a href="https://shopify.dev/docs/storefronts/headless/developer-preview#get-started" target="_blank" class="body-link">developer preview docs</a> under &quot;Deploy a starter template,&quot; alongside the setup paths for other frameworks and existing projects.</p>
</div> ]]></description>
    <pubDate>Tue, 30 Jun 2026 20:00:00 +0000</pubDate>
    <atom:published>2026-06-30T20:00:00.000Z</atom:published>
    <atom:updated>2026-06-30T20:00:00.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <category>Hydrogen</category>
    <link>https://shopify.dev/changelog/hydrogen-now-deploys-to-vercel</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/hydrogen-now-deploys-to-vercel</guid>
  </item>
  <item>
    <title>Configure order attribution for sales channel apps</title>
    <description><![CDATA[ <div class=""><p>Starting in API version <code>2026-07</code>, sales channel apps can use <a href="https://shopify.dev/docs/apps/build/sales-channels/order-attribution" target="_blank" class="body-link">order attribution definitions</a> to identify the source that created an order.</p>
<p>Order attribution definitions are useful when your sales channel app needs attribution that is more specific than the app or channel itself. For example, you can attribute orders to a marketplace, region, account, or surface.</p>
<p>Apps that only need default app or channel attribution don’t need to make any changes.</p>
<p><strong>What’s new</strong></p>
<p>Sales channel apps can now:</p>
<ul>
<li>Create channel-based attribution definitions when creating channel connections.</li>
<li>Define static attribution sources with the <code>order_attribution_config</code> extension.</li>
<li>Create or update attribution definitions with the <a href="https://shopify.dev/docs/api/admin-graphql/2026-07/mutations/orderAttributionDefinitionUpsert" target="_blank" class="body-link"><code>orderAttributionDefinitionUpsert</code></a> mutation.</li>
<li>Query attribution definitions with the <a href="https://shopify.dev/docs/api/admin-graphql/2026-07/queries/orderAttributionDefinitions" target="_blank" class="body-link"><code>orderAttributionDefinitions</code></a> query.</li>
<li>Delete attribution definitions with the GraphQL Admin API.</li>
<li>Pass an attribution definition handle when creating orders with <code>orderCreate</code>.</li>
<li>Pass an attribution definition handle through <code>source_name</code> when creating carts with the Storefront API <code>cartCreate</code> mutation or when using <a href="https://shopify.dev/docs/apps/build/checkout/create-cart-permalinks" target="_blank" class="body-link">cart permalinks</a>.</li>
<li>Read resolved attribution details with <a href="https://shopify.dev/docs/api/admin-graphql/2026-07/objects/Order#field-Order.fields.attribution" target="_blank" class="body-link"><code>Order.attribution</code></a>.</li>
</ul>
<p>To use order attribution definitions, your app must be a sales channel app with a <code>channel_config</code> extension.</p>
<p><strong>What you need to do</strong></p>
<p>If your app needs attribution that is more specific than app-level or channel-level attribution, create order attribution definitions and pass the definition <code>handle</code> in <code>sourceName</code> when creating carts or orders.</p>
<p>If <code>sourceName</code> doesn’t match an approved order attribution definition, Shopify falls back to app-only attribution.</p>
<p>Use <a href="https://shopify.dev/docs/api/admin-graphql/2026-07/objects/Order#field-Order.fields.attribution" target="_blank" class="body-link"><code>Order.attribution</code></a> for new attribution reads. <code>Order.channelInformation</code> remains available, but is deprecated.</p>
</div> ]]></description>
    <pubDate>Tue, 30 Jun 2026 16:00:00 +0000</pubDate>
    <atom:published>2026-06-30T16:00:00.000Z</atom:published>
    <atom:updated>2026-06-30T16:00:00.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <category>Admin Extensions</category>
    <category>Admin GraphQL API</category>
    <category>Storefront API</category>
    <category>2026-07</category>
    <link>https://shopify.dev/changelog/order-attribution-definitions-are-available-in-order-channel-filters</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/order-attribution-definitions-are-available-in-order-channel-filters</guid>
  </item>
  <item>
    <title>Payment mandates now expose an id field</title>
    <description><![CDATA[ <div class=""><p>In API version 2026-07 and later, the <code>PaymentMandateResource</code> object includes a new <code>id</code> field.</p>
<p><code>PaymentMandateResource</code> is returned by the <code>mandates</code> connection on <code>CustomerPaymentMethod</code>. Its <code>id</code> is the same as the corresponding <code>CustomerPaymentMethod.id</code>, which lets you determine which payment method to use for a given mandate scope (for example, the <code>SUBSCRIPTIONS</code> scope) when a single payment instrument is associated with multiple mandate types.</p>
</div> ]]></description>
    <pubDate>Sat, 27 Jun 2026 16:00:00 +0000</pubDate>
    <atom:published>2026-06-27T16:00:00.000Z</atom:published>
    <atom:updated>2026-06-29T16:02:38.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <category>Admin GraphQL API</category>
    <category>2026-07</category>
    <link>https://shopify.dev/changelog/payment-mandates-id-field</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/payment-mandates-id-field</guid>
  </item>
  <item>
    <title>Carrier services will no longer be automatically added to the default shipping profile</title>
    <description><![CDATA[ <div class=""><p>Starting with GraphQL Admin API version 2026-10, creating a carrier service no longer automatically adds it to the shop’s General shipping profile.</p>
<p>This breaking change affects carrier services created using:</p>
<ul>
<li>GraphQL Admin API: <code>carrierServiceCreate</code></li>
<li>REST Admin API: <code>POST /admin/api/{version}/carrier_services.json</code></li>
</ul>
<p>Previously, active API carrier services created through these APIs were automatically added to eligible shipping zones in the shop’s General shipping profile. In API version 2026-10 and later, creating a carrier service only registers the carrier service. Shopify no longer adds that carrier service to the General shipping profile or any of its shipping zones by default.</p>
<p>If your app relies on the previous behavior where creating a carrier service automatically made rates available to merchants, you must update your integration so that rates are explicitly configured. Without these additional steps, merchants won’t see rates from newly created carrier services at checkout.</p>
<p>After creating a carrier service, you must ensure that its rates are added to a shipping profile by either:</p>
<ul>
<li>(Recommended) Directing merchants to manually add the carrier-calculated rate to the appropriate shipping profile in the Shopify admin.</li>
<li>Programmatically adding the carrier-calculated rate to the appropriate shipping profile using the shipping profile APIs.</li>
</ul>
<p>Older supported API versions will continue to use the existing automatic-add behavior for carrier services in the General shipping profile until those versions are sunset.</p>
<p>Learn more about <a href="https://shopify.dev/docs/api/admin-graphql/latest/mutations/carrierServiceCreate" target="_blank" class="body-link"><code>carrierServiceCreate</code></a> and the <a href="https://shopify.dev/docs/api/admin-rest/latest/resources/carrierservice" target="_blank" class="body-link"><code>CarrierService</code> REST resource</a>.</p>
</div> ]]></description>
    <pubDate>Fri, 26 Jun 2026 16:00:00 +0000</pubDate>
    <atom:published>2026-06-26T16:00:00.000Z</atom:published>
    <atom:updated>2026-06-26T16:00:00.000Z</atom:updated>
    <category>API</category>
    <category>Breaking API Change</category>
    <category>Admin GraphQL API</category>
    <category>Admin REST API</category>
    <category>2026-10</category>
    <link>https://shopify.dev/changelog/carrier-services-will-no-longer-be-automatically-added-to-the-default-shipping-profile</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/carrier-services-will-no-longer-be-automatically-added-to-the-default-shipping-profile</guid>
  </item>
  <item>
    <title>Storefront MCP cart tools are being deprecated in favour of UCP Cart MCP</title>
    <description><![CDATA[ <div class=""><h3>What's changing</h3>
<p>The cart tools on the Storefront MCP server are being deprecated in
favour of the UCP-conforming Cart MCP tools:</p>
<ul>
<li><code>get_cart</code> and <code>update_cart</code> on <code>https://{shop}.myshopify.com/api/mcp</code> are deprecated.</li>
</ul>
<p>Cart MCP implements the UCP cart capability (<code>dev.ucp.shopping.cart</code>, version
<code>2026-04-08</code>) and exposes the following tools at the
<code>https://{shop-domain}/api/ucp/mcp</code> endpoint:</p>
<ul>
<li><code>create_cart</code>: Create a new cart with line items and optional buyer context.</li>
<li><code>get_cart</code>: Retrieve the current state of a cart.</li>
<li><code>update_cart</code>: Replace the cart's contents.</li>
<li><code>cancel_cart</code>: Cancel a cart.</li>
</ul>
<p>The deprecated tools will be maintained until August 31, 2026, but all
documentation will refer to the Cart MCP tools.</p>
<h3>What you should do</h3>
<p>If you're building with the Storefront MCP cart tools:</p>
<ul>
<li><p>Migrate <code>get_cart</code> and <code>update_cart</code> calls to the Cart MCP tools, and update
endpoints to use <code>https://{shop-domain}/api/ucp/mcp</code>.</p>
</li>
<li><p>Include a <code>meta</code> object carrying <code>ucp-agent.profile</code> in every request, and a
<code>meta[&quot;idempotency-key&quot;]</code> (UUID) for <code>cancel_cart</code>.</p>
</li>
<li><p>Note that <code>update_cart</code> uses PUT semantics: each request replaces the cart's
full state, so send the complete <code>line_items</code> array on every update rather
than patching individual fields.</p>
</li>
<li><p>Consult the updated request and response schemas for all cart tools and
update your app to match.</p>
<p>  See the documentation for Cart MCP (<a href="https://shopify.dev/docs/agents/carts-and-checkout/cart-mcp" target="_blank" class="body-link">https://shopify.dev/docs/agents/carts-and-checkout/cart-mcp</a>) for more details.</p>
</li>
</ul>
</div> ]]></description>
    <pubDate>Wed, 24 Jun 2026 16:00:00 +0000</pubDate>
    <atom:published>2026-06-24T16:00:00.000Z</atom:published>
    <atom:updated>2026-06-24T16:00:00.000Z</atom:updated>
    <category>Action Required</category>
    <category>API</category>
    <category>Deprecation announcement</category>
    <link>https://shopify.dev/changelog/storefront-mcp-cart-tools-are-being-deprecated-in-favour-of-ucp-cart-mcp</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/storefront-mcp-cart-tools-are-being-deprecated-in-favour-of-ucp-cart-mcp</guid>
  </item>
  <item>
    <title>`DraftOrderDiscountNotAppliedWarning.priceRule` removed in GraphQL Admin API 2026-10</title>
    <description><![CDATA[ <div class=""><p>Starting with GraphQL Admin API version <code>2026-10</code>, the deprecated <code>priceRule</code> field on the <a href="https://shopify.dev/docs/api/admin-graphql/2026-10/objects/DraftOrderDiscountNotAppliedWarning" target="_blank" class="body-link"><code>DraftOrderDiscountNotAppliedWarning</code></a> object is removed.</p>
<p>This is a breaking change for apps that query <code>priceRule</code> on <code>DraftOrderDiscountNotAppliedWarning</code>, which is returned in draft order discount warnings from mutations such as <a href="https://shopify.dev/docs/api/admin-graphql/latest/mutations/draftOrderCalculate" target="_blank" class="body-link"><code>draftOrderCalculate</code></a>, <code>draftOrderCreate</code>, and <code>draftOrderUpdate</code>. If your app selects <code>priceRule</code> in these responses, you must update those queries before upgrading to <code>2026-10</code>.</p>
<p>The warning already exposes the relevant discount data directly, so you no longer need the legacy <code>priceRule</code> object. Use the following fields instead:</p>
<ul>
<li><a href="https://shopify.dev/docs/api/admin-graphql/latest/objects/DraftOrderDiscountNotAppliedWarning#field-DraftOrderDiscountNotAppliedWarning.fields.discountTitle" target="_blank" class="body-link"><code>discountTitle</code></a> — the title of the discount that couldn’t be applied. Use this instead of <code>priceRule { title }</code>.</li>
<li><a href="https://shopify.dev/docs/api/admin-graphql/latest/objects/DraftOrderDiscountNotAppliedWarning#field-DraftOrderDiscountNotAppliedWarning.fields.discountCode" target="_blank" class="body-link"><code>discountCode</code></a> — the code of the discount that couldn’t be applied. Use this instead of <code>priceRule { discountCodes { nodes { code } } }</code>.</li>
</ul>
<p>Update any query that reads <code>priceRule</code> from this warning to select <code>discountTitle</code> and <code>discountCode</code> instead.</p>
<p>Before:</p>
<pre><code class="language-graphql">... on DraftOrderDiscountNotAppliedWarning {
  priceRule {
    title
    discountCodes(first: 1) {
      nodes {
        code
      }
    }
  }
}
</code></pre>
<p>After:</p>
<pre><code class="language-graphql">... on DraftOrderDiscountNotAppliedWarning {
  discountTitle
  discountCode
}
</code></pre>
<p><code>DraftOrderDiscountNotAppliedWarning</code> was the only place where the legacy <code>PriceRule</code> object was reachable from the public GraphQL Admin API. As a result, removing <code>priceRule</code> also removes the <code>PriceRule</code> object and its related types from the public schema in <code>2026-10</code> and later.</p>
<p>Older supported API versions continue to expose <code>priceRule</code> on <code>DraftOrderDiscountNotAppliedWarning</code> until those versions reach end of life.</p>
<p>Learn more about the <a href="https://shopify.dev/docs/api/admin-graphql/latest/objects/DraftOrderDiscountNotAppliedWarning" target="_blank" class="body-link"><code>DraftOrderDiscountNotAppliedWarning</code></a> object.</p>
</div> ]]></description>
    <pubDate>Tue, 23 Jun 2026 18:00:00 +0000</pubDate>
    <atom:published>2026-06-23T18:00:00.000Z</atom:published>
    <atom:updated>2026-06-23T18:00:00.000Z</atom:updated>
    <category>Action Required</category>
    <category>API</category>
    <category>Breaking API Change</category>
    <category>Admin GraphQL API</category>
    <category>2026-10</category>
    <link>https://shopify.dev/changelog/remove-pricerule-from-draft-order-discount-warning</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/remove-pricerule-from-draft-order-discount-warning</guid>
  </item>
  <item>
    <title>Removal of ITEM_NOT_STOCKED_AT_LOCATION error</title>
    <description><![CDATA[ <div class=""><p>The <code>ITEM_NOT_STOCKED_AT_LOCATION</code> error will be removed from <code>InventoryAdjustQuantities</code>, <code>InventoryMoveQuantities</code>, <code>InventorySetOnHandQuantities</code>, and <code>InventorySetQuantitiesUserErrorCode</code> as of API version 2026-10.</p>
<p>Following the changes described <a href="https://changelog.shopify.com/posts/manage-inventory-at-locations-without-activating-them-for-fulfillment" target="_blank" class="body-link">here</a>, inventory quantities can now be adjusted at any location. As a result, the condition that previously triggered <code>ITEM_NOT_STOCKED_AT_LOCATION</code> can no longer occur, and this error is no longer emitted.</p>
<p>This update removes an obsolete error code. If your app currently handles <code>ITEM_NOT_STOCKED_AT_LOCATION</code>, you can safely remove any logic that depends on this specific error.</p>
</div> ]]></description>
    <pubDate>Fri, 19 Jun 2026 16:00:00 +0000</pubDate>
    <atom:published>2026-06-19T16:00:00.000Z</atom:published>
    <atom:updated>2026-06-19T16:00:00.000Z</atom:updated>
    <category>Action Required</category>
    <category>API</category>
    <category>Breaking API Change</category>
    <category>Admin GraphQL API</category>
    <category>2026-10</category>
    <link>https://shopify.dev/changelog/removal-of-itemnotstockedatlocation-error</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/removal-of-itemnotstockedatlocation-error</guid>
  </item>
  <item>
    <title>Flow action extensions now support relative paths for endpoint URLs </title>
    <description><![CDATA[ <div class=""><p>You can now use relative paths for endpoint URLs in your Flow action <a href="https://shopify.dev/docs/apps/build/flow/actions/reference#toml" target="_blank" class="body-link">extension configuration</a>. The <code>runtime_url</code>, <code>validation_url</code>, <code>config_page_url</code>, and <code>config_page_preview_url</code> properties accept either an absolute HTTPS URL, such as <code>https://example.com/api/flow/actions/place-bid</code>, or a relative path that starts with a single <code>/</code>, such as <code>/api/flow/actions/place-bid</code>.</p>
<p>When you use a relative path, Shopify CLI resolves it against your development tunnel URL while <code>shopify app dev</code> is running, and against your app’s <code>application_url</code> after you deploy. This means you no longer need to update your <code>runtime_url</code> each time your development tunnel URL changes, making it easier to point Flow actions at routes hosted by your own app.</p>
<p>Use an absolute HTTPS URL when your endpoint is hosted on a different domain or service than your app, or when you want Flow to call the same URL in every environment. Protocol-relative URLs (such as <code>//example.com/api/execute</code>) aren’t supported, and your app configuration must include an HTTPS <code>application_url</code> before you deploy with relative paths.</p>
<p>For more details, see the Flow action <a href="https://shopify.dev/docs/apps/build/flow/actions/reference" target="_blank" class="body-link">configuration reference</a> and <a href="https://shopify.dev/docs/apps/build/flow/actions/create" target="_blank" class="body-link">Create a Flow action</a>.</p>
</div> ]]></description>
    <pubDate>Thu, 18 Jun 2026 16:00:00 +0000</pubDate>
    <atom:published>2026-06-18T16:00:00.000Z</atom:published>
    <atom:updated>2026-06-18T16:00:00.000Z</atom:updated>
    <category>Tools</category>
    <category>Update</category>
    <link>https://shopify.dev/changelog/flow-action-extensions-now-support-relative-paths-for-endpoint-urls</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/flow-action-extensions-now-support-relative-paths-for-endpoint-urls</guid>
  </item>
  <item>
    <title>New purchaseType and recurringCycleLimit fields in the discounts API for discount UI extensions</title>
    <description><![CDATA[ <div class=""><p>You can now configure <code>purchaseType</code> and <code>recurringCycleLimit</code> for app discounts directly from discount UI extensions using the discounts plugin.</p>
<p>Previously, these fields were only accessible through the GraphQL Admin API. App developers building discount UI extensions had no way to let merchants control whether a discount applies to one-time purchases, subscriptions, or both, or how many subscription billing cycles a discount should apply to.</p>
<p>The following fields are now available through the discounts plugin:</p>
<ul>
<li><strong><code>purchaseType</code></strong>: control whether the discount applies to one-time purchases, subscriptions, or both</li>
<li><strong><code>recurringCycleLimit</code></strong>: set the number of billing cycles a subscription discount applies to (such as, a value of 4 applies the discount on the first 4 orders, then stops). A value of 0 means unlimited.</li>
</ul>
<p>These fields work with both <code>DiscountCodeApp</code> and <code>DiscountAutomaticApp</code> discount types, and the values are enforced by purchase type filtering at checkout.</p>
<p><strong>No action is required.</strong> To start using these fields, update your discount UI extension to include them in your discounts plugin configuration.</p>
<p>For more details, see the <a href="https://shopify.dev/docs/api/admin-graphql/latest/input-objects/DiscountAutomaticAppInput" target="_blank" class="body-link">API documentation for <code>DiscountAutomaticAppInput</code></a>.</p>
</div> ]]></description>
    <pubDate>Wed, 17 Jun 2026 18:00:00 +0000</pubDate>
    <atom:published>2026-06-17T18:00:00.000Z</atom:published>
    <atom:updated>2026-06-17T18:00:00.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <category>Admin Extensions</category>
    <category>2026-04</category>
    <link>https://shopify.dev/changelog/new-purchasetype-and-recurringcyclelimit-fields-available-in-the-discount-ui-extension-api</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/new-purchasetype-and-recurringcyclelimit-fields-available-in-the-discount-ui-extension-api</guid>
  </item>
  <item>
    <title>Shopify's Spring '26 Edition: Everywhere </title>
    <description><![CDATA[ <div class=""></div> ]]></description>
    <pubDate>Wed, 17 Jun 2026 16:00:00 +0000</pubDate>
    <atom:published>2026-06-17T16:00:00.000Z</atom:published>
    <atom:updated>2026-07-10T14:09:50.000Z</atom:updated>

    <link>https://shopify.dev/changelog/shopify-s-spring-26-edition-everywhere</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/shopify-s-spring-26-edition-everywhere</guid>
  </item>
  <item>
    <title>Apps can now open Shopify’s file picker with the Intents API</title>
    <description><![CDATA[ <div class=""><p>Apps can now open Shopify’s native file picker with the Intents API. This lets your app prompt merchants to choose files from their Shopify file library without building a custom picker or sending them through a separate flow.</p>
<p>With a single API call, your app can open the file picker, optionally filter by media type, enable multiple selection, and preselect files. When the merchant finishes selecting files, your app receives the selected file IDs as an array in <code>response.data.ids</code>.</p>
<h2>New intent</h2>
<p>The following intent is now available:</p>
<ul>
<li><code>pick:shopify/File</code></li>
</ul>
<h2>How it works</h2>
<p>Invoke the intent from App Home or a UI extension:</p>
<pre><code class="language-js">const activity = await shopify.intents.invoke('pick:shopify/File');

const response = await activity.complete;

if (response.code === 'ok') {
  console.log('Selected file IDs:', response.data.ids);
  // response.data.ids is an array of selected file IDs
}
</code></pre>
<p>Learn more in the <a href="https://shopify.dev/docs/api/app-home/apis/user-interface-and-interactions/intents-api?example=pick-files" target="_blank" class="body-link">App Home (iframe) Intents docs</a> and <a href="https://shopify.dev/docs/api/app-home-ui-extension/latest/target-apis/utility-apis/intents-api?example=pick-files" target="_blank" class="body-link">App Home (UI extension) Intents docs</a>.</p>
</div> ]]></description>
    <pubDate>Wed, 17 Jun 2026 16:00:00 +0000</pubDate>
    <atom:published>2026-06-17T16:00:00.000Z</atom:published>
    <atom:updated>2026-06-17T21:56:40.000Z</atom:updated>
    <category>Tools</category>
    <category>New</category>
    <category>Admin Extensions</category>
    <category>App Bridge</category>
    <link>https://shopify.dev/changelog/intents-api-file-picker</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/intents-api-file-picker</guid>
  </item>
  <item>
    <title>Admin GraphQL API now supports app-owned delivery profiles that cover all shippable items</title>
    <description><![CDATA[ <div class=""><p>As of GraphQL Admin API version 2026-07, app-owned shipping delivery profiles support a new boolean <code>coversAllItems</code> field.</p>
<p>Use <code>coversAllItems</code> on app-owned shipping delivery profiles to indicate that a profile applies to every shippable product variant in the store, without explicitly assigning each product or variant to that profile.</p>
<p>The field is available on the <code>DeliveryProfile</code> type:</p>
<pre><code class="language-graphql">query {
  deliveryProfiles(first: 10) {
    nodes {
      id
      name
      coversAllItems
    }
  }
}
</code></pre>
<p>You can also set <code>coversAllItems</code> through <code>DeliveryProfileInput</code> when creating or updating an app-owned shipping delivery profile:</p>
<pre><code class="language-graphql">mutation {
  deliveryProfileUpdate(
    id: &quot;gid://shopify/DeliveryProfile/123&quot;
    profile: {
      coversAllItems: true
    }
  ) {
    profile {
      id
      coversAllItems
    }
    userErrors {
      field
      message
    }
  }
}
</code></pre>
<p>When <code>coversAllItems</code> is <code>true</code>, rates from the app-owned shipping delivery profile apply to all shippable items at checkout, overriding any explicit product or variant assignments.</p>
<p><code>coversAllItems</code> is only supported for authorized API clients on app-owned shipping delivery profiles. It is not supported on merchant-managed delivery profiles or on non-shipping profiles.</p>
<p>If you omit <code>coversAllItems</code> when creating a profile, it defaults to <code>false</code>. If you omit it when updating a profile, the existing value is preserved.</p>
<p>Learn more in the <a href="https://shopify.dev/docs/api/admin-graphql/latest/objects/DeliveryProfile" target="_blank" class="body-link">delivery profiles documentation</a>.</p>
</div> ]]></description>
    <pubDate>Wed, 17 Jun 2026 16:00:00 +0000</pubDate>
    <atom:published>2026-06-17T16:00:00.000Z</atom:published>
    <atom:updated>2026-06-17T16:00:00.000Z</atom:updated>
    <category>API</category>
    <category>Update</category>
    <category>Admin GraphQL API</category>
    <category>2026-07</category>
    <link>https://shopify.dev/changelog/admin-graphql-api-now-supports-app-owned-delivery-profiles-that-cover-all-shippable-items</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/admin-graphql-api-now-supports-app-owned-delivery-profiles-that-cover-all-shippable-items</guid>
  </item>
  <item>
    <title>Define and set metafields on inventory transfers in the GraphQL Admin API</title>
    <description><![CDATA[ <div class=""><p>As of GraphQL Admin API version <code>2026-07</code>, you can define metafields for inventory transfers and set metafields directly when creating or editing transfers.</p>
<p>Use <code>MetafieldOwnerType.TRANSFER</code> with metafield definition mutations to create transfer-specific metafield definitions. You can also pass metafields in the <code>metafields</code> input on the following mutations:</p>
<ul>
<li><a href="https://shopify.dev/docs/api/admin-graphql/2026-07/mutations/inventoryTransferCreate" target="_blank" class="body-link"><code>inventoryTransferCreate</code></a></li>
<li><a href="https://shopify.dev/docs/api/admin-graphql/2026-07/mutations/inventoryTransferCreateAsReadyToShip" target="_blank" class="body-link"><code>inventoryTransferCreateAsReadyToShip</code></a></li>
<li><a href="https://shopify.dev/docs/api/admin-graphql/2026-07/mutations/inventoryTransferEdit" target="_blank" class="body-link"><code>inventoryTransferEdit</code></a></li>
</ul>
<p>Duplicating a transfer will also duplicates its metafields on <a href="https://shopify.dev/docs/api/admin-graphql/2026-07/mutations/inventoryTransferDuplicate" target="_blank" class="body-link"><code>inventoryTransferDuplicate</code></a>. This lets apps define, validate, and write transfer-specific custom data, such as ERP references, handling instructions, review teams, or other metadata, without requiring a separate <code>metafieldsSet</code> call after creating or editing a transfer.</p>
<p>Learn more about <a href="https://shopify.dev/docs/apps/build/custom-data/metafields" target="_blank" class="body-link">metafields</a> and the <a href="https://shopify.dev/docs/api/admin-graphql" target="_blank" class="body-link">Admin GraphQL API</a>.</p>
</div> ]]></description>
    <pubDate>Wed, 17 Jun 2026 16:00:00 +0000</pubDate>
    <atom:published>2026-06-17T16:00:00.000Z</atom:published>
    <atom:updated>2026-06-17T16:00:00.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <category>Admin GraphQL API</category>
    <category>2026-07</category>
    <link>https://shopify.dev/changelog/define-and-set-metafields-on-inventory-transfers-in-the-admin-graphql-api</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/define-and-set-metafields-on-inventory-transfers-in-the-admin-graphql-api</guid>
  </item>
  <item>
    <title>Purchase-type filtering now enforced for app discounts </title>
    <description><![CDATA[ <div class=""><p>The <a href="https://shopify.dev/docs/api/admin-graphql/latest/input-objects/DiscountAutomaticAppInput#fields-appliesOnSubscription" target="_blank" class="body-link"><code>appliesOnSubscription</code></a> and <a href="https://shopify.dev/docs/api/admin-graphql/latest/input-objects/DiscountAutomaticAppInput#fields-appliesOnOneTimePurchase" target="_blank" class="body-link"><code>appliesOnOneTimePurchase</code></a> fields on app discounts are now enforced at checkout. Previously, these fields existed on <code>DiscountCodeAppInput</code> and <code>DiscountAutomaticAppInput</code> but had no effect. All app discounts applied to every line item regardless of purchase type.</p>
<h2>What changed</h2>
<p>If an app discount is configured with <code>appliesOnSubscription: false</code>, it will only apply to one-time purchase line items, and vice versa. This filtering happens at the platform level after your discount function runs, so function-targeted lines that don't match the purchase type configuration will be excluded.</p>
<p>As part of this change, we also backfilled all existing app discounts to <code>appliesOnSubscription: true</code> and <code>appliesOnOneTimePurchase: true</code>. This means existing discounts continue to apply to all line items, so there's no behavior change for current discounts.</p>
<h2>What you need to do</h2>
<p>No action is required. If you're building a full-page app discount experience, you can now use these fields to control which purchase types your discount applies to. </p>
<h2>Related docs</h2>
<p>For more details, see the <a href="https://shopify.dev/docs/api/admin-graphql/latest/input-objects/DiscountAutomaticAppInput" target="_blank" class="body-link">API documentation for <code>DiscountAutomaticAppInput</code></a>.</p>
</div> ]]></description>
    <pubDate>Wed, 17 Jun 2026 16:00:00 +0000</pubDate>
    <atom:published>2026-06-17T16:00:00.000Z</atom:published>
    <atom:updated>2026-06-17T16:00:00.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <category>Admin GraphQL API</category>
    <link>https://shopify.dev/changelog/purchase-type-filtering-now-enforced-for-app-discounts</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/purchase-type-filtering-now-enforced-for-app-discounts</guid>
  </item>
  <item>
    <title>Hydrogen developer preview</title>
    <description><![CDATA[ <div class=""><p>The next version of Hydrogen moves the commerce logic out of React Router into a framework-agnostic core. You can build storefronts in any JavaScript framework using Shopify's commerce primitives, and it ships with skills that coding agents use to scaffold a storefront for you. </p>
<p>This is an early developer preview, and we're looking for your feedback as we keep building it out.</p>
<p>Learn more about the <a href="https://github.com/Shopify/hydrogen/tree/preview" target="_blank" class="body-link">Hydrogen Developer Preview on Github</a>.</p>
</div> ]]></description>
    <pubDate>Wed, 17 Jun 2026 15:45:00 +0000</pubDate>
    <atom:published>2026-06-17T15:45:00.000Z</atom:published>
    <atom:updated>2026-06-17T18:17:43.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <category>Hydrogen</category>
    <link>https://shopify.dev/changelog/hydrogen-developer-preview</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/hydrogen-developer-preview</guid>
  </item>
  <item>
    <title>Create channel markets with the GraphQL Admin API</title>
    <description><![CDATA[ <div class=""><p>Starting in API version <code>2026-07</code>, the GraphQL Admin API supports channel markets. Apps can now create and update Markets that apply to one or more sales channels, then use existing catalog and market APIs to manage channel-specific product availability, pricing, and currency.</p>
<p>This is an additive change. Existing apps don’t need to make updates unless they create, query, or make assumptions about Markets or market catalogs types.</p>
<h2>What changed</h2>
<p>You can now:</p>
<ul>
<li>Use <a href="https://shopify.dev/docs/api/admin-graphql/2026-07/enums/MarketType" target="_blank" class="body-link"><code>MarketType.CHANNEL</code></a> and <a href="https://shopify.dev/docs/api/admin-graphql/2026-07/enums/MarketConditionType" target="_blank" class="body-link"><code>MarketConditionType.CHANNEL</code></a> to identify channel markets.</li>
<li>Create channel markets with <a href="https://shopify.dev/docs/api/admin-graphql/2026-07/input-objects/MarketConditionsInput#fields-channelsCondition" target="_blank" class="body-link"><code>MarketCreateInput.conditions.channelsCondition</code></a> and <a href="https://shopify.dev/docs/api/admin-graphql/2026-07/input-objects/MarketConditionsChannelsInput#fields-channelIds" target="_blank" class="body-link"><code>MarketConditionsChannelsInput.channelIds</code></a>.</li>
<li>Add or remove channel conditions through <a href="https://shopify.dev/docs/api/admin-graphql/2026-07/input-objects/MarketUpdateInput#fields-conditions" target="_blank" class="body-link"><code>MarketUpdateInput.conditions</code></a>.</li>
<li>Query a market’s channels with <a href="https://shopify.dev/docs/api/admin-graphql/2026-07/objects/Market#field-Market.fields.channels" target="_blank" class="body-link"><code>Market.channels</code></a> and <a href="https://shopify.dev/docs/api/admin-graphql/2026-07/objects/Market#field-Market.fields.channelsCount" target="_blank" class="body-link"><code>Market.channelsCount</code></a>.</li>
<li>Query a channel’s markets with <a href="https://shopify.dev/docs/api/admin-graphql/2026-07/objects/Channel#field-Channel.fields.markets" target="_blank" class="body-link"><code>Channel.markets</code></a> and <a href="https://shopify.dev/docs/api/admin-graphql/2026-07/objects/Channel#field-Channel.fields.marketsCount" target="_blank" class="body-link"><code>Channel.marketsCount</code></a>.</li>
<li>Use <a href="https://shopify.dev/docs/api/admin-graphql/2026-07/objects/Channel#field-Channel.fields.activeRegions" target="_blank" class="body-link"><code>Channel.activeRegions</code></a> to read the regions where a channel has active product feeds.</li>
<li>Filter markets by type with <a href="https://shopify.dev/docs/api/admin-graphql/2026-07/queries/markets#arguments-type" target="_blank" class="body-link"><code>markets(type: CHANNEL)</code></a>.</li>
</ul>
<h2>What to do</h2>
<p>If your app works with Markets or catalogs, update any logic that assumes markets are only regional, retail-location, company-location, or none-type markets.</p>
<p>If your app wants to create channel markets, pass channel IDs through <code>channelsCondition.channelIds</code>, then assign catalogs and pricing configuration using the existing Markets and catalog APIs. Product feed output continues to respect both the channel market’s catalog settings and the sales channel’s own publishing controls.</p>
<h2>Related docs</h2>
<ul>
<li><a href="https://shopify.dev/docs/api/admin-graphql/2026-07/objects/Market" target="_blank" class="body-link"><code>Market</code> object</a></li>
<li><a href="https://shopify.dev/docs/api/admin-graphql/2026-07/objects/Channel" target="_blank" class="body-link"><code>Channel</code> object</a></li>
<li><a href="https://shopify.dev/docs/api/admin-graphql/2026-07/input-objects/MarketConditionsChannelsInput" target="_blank" class="body-link"><code>MarketConditionsChannelsInput</code></a></li>
<li><a href="https://shopify.dev/docs/api/admin-graphql/2026-07/enums/MarketType" target="_blank" class="body-link"><code>MarketType</code> enum</a></li>
<li><a href="https://shopify.dev/docs/apps/build/sales-channels/channel-config-extension" target="_blank" class="body-link">Channel config extension</a></li>
</ul>
</div> ]]></description>
    <pubDate>Wed, 17 Jun 2026 15:45:00 +0000</pubDate>
    <atom:published>2026-06-17T15:45:00.000Z</atom:published>
    <atom:updated>2026-06-17T15:45:00.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <category>Admin GraphQL API</category>
    <category>2026-07</category>
    <link>https://shopify.dev/changelog/create-channel-markets-with-the-graphql-admin-api</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/create-channel-markets-with-the-graphql-admin-api</guid>
  </item>
  <item>
    <title>WhatsApp marketing consent now available in the Admin API and Customer Account API</title>
    <description><![CDATA[ <div class=""><p>WhatsApp marketing consent can now be managed through both the Customer Account and Admin APIs. Use the <code>customerWhatsAppMarketingConsentUpdate</code> mutation to update a customer’s WhatsApp marketing consent status for their default phone number. You can read the current WhatsApp marketing consent value from the <code>CustomerPhoneNumber</code> object via the <code>whatsAppMarketingConsent</code> field.</p>
<p>For more details on managing WhatsApp marketing consent, see the <code>customerWhatsAppMarketingConsentUpdate</code> mutation in the <a href="https://shopify.dev/docs/api/admin-graphql/unstable/mutations/customerWhatsAppMarketingConsentUpdate" target="_blank" class="body-link">Admin API</a> and <a href="https://shopify.dev/docs/api/customer/unstable/mutations/customerWhatsAppMarketingConsentUpdate" target="_blank" class="body-link">Customer Account API</a> references.</p>
</div> ]]></description>
    <pubDate>Wed, 17 Jun 2026 15:45:00 +0000</pubDate>
    <atom:published>2026-06-17T15:45:00.000Z</atom:published>
    <atom:updated>2026-06-17T15:45:00.000Z</atom:updated>
    <category>Action Required</category>
    <category>API</category>
    <category>New</category>
    <category>Admin GraphQL API</category>
    <category>Customer Account API</category>
    <category>Events &amp; webhooks</category>
    <category>2026-07</category>
    <link>https://shopify.dev/changelog/whatsapp-marketing-consent-now-available</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/whatsapp-marketing-consent-now-available</guid>
  </item>
  <item>
    <title>New App Store requirements for Sidekick app extensions</title>
    <description><![CDATA[ <div class=""><p>We’ve introduced two new Shopify <a href="https://shopify.dev/docs/apps/launch/shopify-app-store/app-store-requirements" target="_blank" class="body-link">App Store requirements</a> for <a href="https://shopify.dev/docs/apps/build/sidekick" target="_blank" class="body-link">Sidekick app extensions</a> to protect platform integrity, ensure merchant transparency, and preserve trust.</p>
<p>Starting today, all <a href="https://shopify.dev/docs/apps/build/sidekick" target="_blank" class="body-link">Sidekick app extensions</a> must comply with the following guidelines:</p>
<ul>
<li><a href="https://shopify.dev/docs/apps/launch/shopify-app-store/app-store-requirements#sidekick-app-extensions-must-align-with-stated-app-functionality" target="_blank" class="body-link"><strong>2.2.8 Sidekick app extensions must align with stated app functionality</strong></a>: <a href="https://shopify.dev/docs/apps/build/sidekick" target="_blank" class="body-link">Sidekick app extensions</a> must operate within the scope of your app’s core functionality. To ensure platform integrity and merchant transparency, your extension configuration, public <a href="https://shopify.dev/docs/apps/launch/shopify-app-store/best-practices#app-store-listing-content" target="_blank" class="body-link">App Store listing</a>, and actual runtime execution must be materially consistent. Tools, intents, and actions exposed to Sidekick must be a logical representation of what your app does for the merchant on its own surface.</li>
<li><a href="https://shopify.dev/docs/apps/launch/shopify-app-store/app-store-requirements#dont-display-promotions-advertisements-or-cross-sell-other-services-in-sidekick-app-extensions" target="_blank" class="body-link"><strong>2.2.9 Don't display promotions, advertisements, or cross-sell other services in Sidekick app extensions</strong></a>: Don't use <a href="https://shopify.dev/docs/apps/build/sidekick" target="_blank" class="body-link">Sidekick app extensions</a> to promote your app, promote related apps, or request reviews.</li>
</ul>
<h3>What this means for developers</h3>
<p>If you’ve built (or plan to build) <a href="https://shopify.dev/docs/apps/build/sidekick" target="_blank" class="body-link">Sidekick app extensions</a>, please review:</p>
<ul>
<li>Your extension’s TOML configuration</li>
<li>Your extension’s runtime behavior in Sidekick</li>
<li>Your public <a href="https://shopify.dev/docs/apps/launch/shopify-app-store/best-practices#app-store-listing-content" target="_blank" class="body-link">App Store listing</a></li>
</ul>
<p>Make sure that:</p>
<ul>
<li>The tools, intents, and actions you expose in Sidekick stay within your app’s core functionality.</li>
<li>Your extension’s configuration and behavior match how your app is described in its App Store listing.</li>
<li>Your Sidekick app extension does not include promotions, advertisements, cross-sell content, or review requests.</li>
</ul>
<p>To learn more, review our <a href="https://shopify.dev/docs/apps/launch/shopify-app-store/app-store-requirements" target="_blank" class="body-link">App Store requirements</a> and <a href="https://shopify.dev/docs/apps/build/sidekick" target="_blank" class="body-link">Sidekick app extensions</a> documentation on <a href="https://shopify.dev/docs" target="_blank" class="body-link">shopify.dev</a>.</p>
</div> ]]></description>
    <pubDate>Wed, 17 Jun 2026 15:45:00 +0000</pubDate>
    <atom:published>2026-06-17T15:45:00.000Z</atom:published>
    <atom:updated>2026-06-17T15:45:00.000Z</atom:updated>
    <category>App store</category>
    <category>New</category>
    <link>https://shopify.dev/changelog/sidekick-app-extensions-app-store-requirements</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/sidekick-app-extensions-app-store-requirements</guid>
  </item>
  <item>
    <title>Bulk queries now execute up to 4X faster</title>
    <description><![CDATA[ <div class=""><p>Exporting large datasets from Shopify is now up to 4X faster, thanks to optimizations to <a href="https://shopify.dev/docs/api/usage/bulk-operations/queries" target="_blank" class="body-link">bulk queries</a>.</p>
<p>Bulk operations are the most efficient way to import and export data from Shopify stores. Compared to synchronous use of the Admin API, you can build functionality faster with bulk operations, process large datasets in less time, and spend less on infrastructure.</p>
<p>Other recent improvements to bulk operations include:</p>
<ul>
<li><a href="https://shopify.dev/changelog/new-queries-for-bulk-operations" target="_blank" class="body-link">New queries for managing bulk operations</a>  </li>
<li><a href="https://shopify.dev/changelog/faster-bulk-operations" target="_blank" class="body-link">Support for all mutations and up to 5 concurrent bulk operations</a>  </li>
<li><a href="https://shopify.dev/changelog/use-the-admin-api-and-bulk-operations-in-shopify-cli" target="_blank" class="body-link">Support for bulk operations in Shopify CLI</a></li>
</ul>
<p>You can run your own comparison of bulk queries and mutations against synchronous API calls with the <a href="https://github.com/Shopify/bulk-operations-sample-app/" target="_blank" class="body-link">bulk operations sample app</a>, or read more about bulk <a href="https://shopify.dev/docs/api/usage/bulk-operations/queries" target="_blank" class="body-link">queries</a> and <a href="https://shopify.dev/docs/api/usage/bulk-operations/imports" target="_blank" class="body-link">mutations</a>.</p>
</div> ]]></description>
    <pubDate>Wed, 17 Jun 2026 15:45:00 +0000</pubDate>
    <atom:published>2026-06-17T15:45:00.000Z</atom:published>
    <atom:updated>2026-06-17T15:45:00.000Z</atom:updated>
    <category>API</category>
    <category>Update</category>
    <category>Admin GraphQL API</category>
    <link>https://shopify.dev/changelog/bulk-queries-now-execute-faster</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/bulk-queries-now-execute-faster</guid>
  </item>
  <item>
    <title>Sidekick app extensions available today</title>
    <description><![CDATA[ <div class=""><p>All app developers can now build Sidekick app extensions. These extensions allow your app to integrate with Sidekick, giving Sidekick the ability to access data or take action within your apps.</p>
<h3>What's available today</h3>
<ul>
<li><strong><a href="https://shopify.dev/docs/apps/build/sidekick/build-app-data" target="_blank" class="body-link">App data</a></strong>: Make your app's content searchable within Sidekick. Merchants can ask questions like &quot;Find my best-performing email subject lines,&quot; and Sidekick will display relevant campaigns from your app along with key metrics.</li>
<li><strong><a href="https://shopify.dev/docs/apps/build/sidekick/build-app-actions" target="_blank" class="body-link">App actions</a></strong>: Allow merchants to take action within your app directly from Sidekick. Sidekick will navigate to the appropriate page in your app, pre-filled with relevant context, allowing merchants to confirm actions before any changes are made.</li>
</ul>
<p>Eighteen launch partners, including Klaviyo, Loop, Smile, Judge.me, Checkout Links, and Matrixify, are already live as part of our developer early access program.</p>
<h3>Learn more</h3>
<p>Shopify CLI simplifies the process by scaffolding the entire extension setup, enabling you to deploy a functional extension in minutes. To get started, refer to the <a href="https://shopify.dev/docs/apps/build/sidekick" target="_blank" class="body-link">Sidekick app extensions documentation</a>.</p>
<h3>Send us feedback</h3>
<p>We invite you to share your feedback, comments, and questions in the <a href="https://community.shopify.dev/c/extensions/5" target="_blank" class="body-link">Shopify Developer Community</a>. Your insights are invaluable to us, and we look forward to hearing from you.</p>
</div> ]]></description>
    <pubDate>Wed, 17 Jun 2026 15:45:00 +0000</pubDate>
    <atom:published>2026-06-17T15:45:00.000Z</atom:published>
    <atom:updated>2026-06-17T15:45:00.000Z</atom:updated>
    <category>Platform</category>
    <category>New</category>
    <link>https://shopify.dev/changelog/sidekick-app-extensions-available-today</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/sidekick-app-extensions-available-today</guid>
  </item>
  <item>
    <title>Color palettes in Themes</title>
    <description><![CDATA[ <div class=""><p>Themes now support a new <code>color_palette</code> setting type. Palettes give merchants a single grid of colors they can edit directly, and changes apply across the entire theme. Individual <code>color</code> and <code>color_background</code> settings can reference palette entries as defaults, and merchants can override any color at the section or block level for local control.</p>
<p>Color schemes continue to work, so existing themes don't need to change, and color palettes aren't required for new themes or Theme Store submissions. We're focusing future development on palettes because they give merchants a better editing experience, so we recommend them when building new themes.</p>
<p>To see how this works in practice, try the latest version of Horizon (4.0.0), which uses the new palette system throughout.</p>
<p>For implementation details, see the <a href="https://shopify.dev/docs/storefronts/themes/architecture/settings/input-settings#color_palette" target="_blank" class="body-link"><code>color_palette</code> developer documentation</a>. </p>
</div> ]]></description>
    <pubDate>Wed, 17 Jun 2026 15:45:00 +0000</pubDate>
    <atom:published>2026-06-17T15:45:00.000Z</atom:published>
    <atom:updated>2026-06-17T15:45:00.000Z</atom:updated>
    <category>Themes</category>
    <category>New</category>
    <link>https://shopify.dev/changelog/color-palettes</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/color-palettes</guid>
  </item>
  <item>
    <title>Built for Shopify requirements for Returns and exchanges apps and Subscription apps (effective December 1, 2026)</title>
    <description><![CDATA[ <div class=""><p><strong>Effective December 1, 2026</strong>, Returns and exchanges apps and Subscription apps that provide buyer-facing self-service experiences must authenticate customers using the Customer Account API.</p>
<p>Apps that don't meet this requirement by the deadline are at risk of <a href="https://shopify.dev/docs/apps/launch/built-for-shopify/regain-lost-status" target="_blank" class="body-link">losing Built for Shopify status</a>.</p>
<h3>What's changing</h3>
<p><a href="https://shopify.dev/docs/apps/launch/built-for-shopify/requirements#returns-use-customer-account-api" target="_blank" class="body-link">Returns and exchanges</a> and <a href="https://shopify.dev/docs/apps/launch/built-for-shopify/requirements#subscriptions-use-customer-account-api" target="_blank" class="body-link">Subscription</a> apps with buyer-facing self-service experiences must use the Customer Account API for customer authentication. This gives buyers and merchants a single, secure sign-in across their storefront, apps, and customer accounts.</p>
<h3>Who this affects</h3>
<p>Your app is affected if it falls into either category and offers buyers a self-service experience (for example, managing returns, tracking exchanges, or updating a subscription).</p>
<h3>What you need to do</h3>
<p>Integrate the Customer Account API for customer authentication in your buyer-facing flows. Review the updated <a href="https://shopify.dev/docs/apps/launch/built-for-shopify/requirements" target="_blank" class="body-link">Built for Shopify requirements</a> for full details.</p>
<h3>Deadline</h3>
<p>December 1, 2026.</p>
</div> ]]></description>
    <pubDate>Wed, 17 Jun 2026 15:45:00 +0000</pubDate>
    <atom:published>2026-06-17T15:45:00.000Z</atom:published>
    <atom:updated>2026-06-17T15:45:00.000Z</atom:updated>
    <category>Action Required</category>
    <category>Built for Shopify</category>
    <category>Update</category>
    <link>https://shopify.dev/changelog/built-for-shopify-requirements-for-returns-and-exchanges-and-subscription-apps</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/built-for-shopify-requirements-for-returns-and-exchanges-and-subscription-apps</guid>
  </item>
  <item>
    <title>Monitor admin web vitals in the Dev Dashboard</title>
    <description><![CDATA[ <div class=""><p>Your app's admin performance data is now available in the Dev Dashboard, alongside your existing monitoring tools. This change eliminates the need to switch between Partner Dashboard tabs to check web vitals.</p>
<h2>What's changed</h2>
<p>The admin performance dashboards have moved from the Partner Dashboard to the Dev Dashboard. You can now access daily and 28-day P75 rollups for three Core Web Vitals:</p>
<ul>
<li><strong>LCP (Largest Contentful Paint):</strong> Measures loading performance.</li>
<li><strong>INP (Interaction to Next Paint):</strong> Assesses interactivity.</li>
<li><strong>CLS (Cumulative Layout Shift):</strong> Evaluates visual stability.</li>
</ul>
<p><strong>Note</strong>: FID (First Input Delay) has been retired. INP has replaced it as a Core Web Vital, and the dashboards reflect this update.</p>
<p>Each metric provides a clear pass/fail status based on the thresholds used for the Built for Shopify evaluation. The data displayed is the same as that used by the App Store to assess your app's compliance, ensuring consistency.</p>
<h2>What you need to do</h2>
<p>No code changes are required. Your app's web vitals telemetry will continue to function as before.</p>
<p>If you've bookmarked admin performance pages in the Partner Dashboard, those URLs will automatically redirect to the Dev Dashboard.</p>
<p>Links on the app ‘Distribution’ page now point to the new location.</p>
<p><strong>Resources</strong></p>
<ul>
<li><a href="#" target="_blank" class="body-link">Built for Shopify requirements</a></li>
<li><a href="#" target="_blank" class="body-link">Core Web Vitals documentation</a></li>
</ul>
</div> ]]></description>
    <pubDate>Wed, 17 Jun 2026 15:45:00 +0000</pubDate>
    <atom:published>2026-06-17T15:45:00.000Z</atom:published>
    <atom:updated>2026-06-17T15:45:00.000Z</atom:updated>
    <category>Tools</category>
    <category>Update</category>
    <link>https://shopify.dev/changelog/monitor-admin-web-vitals-in-the-dev-dashboard</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/monitor-admin-web-vitals-in-the-dev-dashboard</guid>
  </item>
  <item>
    <title>Standard storefront events and actions</title>
    <description><![CDATA[ <div class=""><p>Liquid storefronts now have a <a href="https://shopify.dev/docs/storefronts/themes/best-practices/standard-events-and-actions" target="_blank" class="body-link">standard communication layer</a> between themes and the code that runs on them. Themes emit events, while apps and agents call actions. </p>
<p>Both work across all themes, and they ship together so you implement only once:</p>
<ul>
<li><a href="https://shopify.dev/docs/storefronts/themes/best-practices/standard-events" target="_blank" class="body-link">Events</a> are DOM events for commerce interactions: <code>shopify:product:view</code>, <code>shopify:cart:lines-update</code>, <code>shopify:search:update</code>, and others. Theme developers implement these in their theme code. App developers subscribe with plain JavaScript and get payload data directly, no follow-up API call needed.</li>
<li><a href="https://shopify.dev/docs/storefronts/themes/best-practices/standard-actions" target="_blank" class="body-link">Actions</a> go the other direction. <code>Shopify.actions.updateCart</code>, <code>getCart</code>, and <code>openCart</code> are available on every Liquid storefront. Apps and agents call them to trigger theme behaviors. Out of the box, they hit the Storefront API and reload the page. Theme developers override them to skip the reload and handle the UI update directly. Actions also emit the corresponding event on success.</li>
</ul>
<p>Read the <a href="https://shopify.dev/docs/storefronts/themes/best-practices/standard-events-and-actions" target="_blank" class="body-link">documentation</a> for more details. </p>
</div> ]]></description>
    <pubDate>Wed, 17 Jun 2026 15:45:00 +0000</pubDate>
    <atom:published>2026-06-17T15:45:00.000Z</atom:published>
    <atom:updated>2026-06-18T13:50:50.000Z</atom:updated>
    <category>Themes</category>
    <category>New</category>
    <link>https://shopify.dev/changelog/standard-storefront-events-and-actions</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/standard-storefront-events-and-actions</guid>
  </item>
  <item>
    <title>Buy Shipping Labels with the GraphQL Admin API</title>
    <description><![CDATA[ <div class=""><h2>New <code>shippingLabelPurchase</code> mutation in the GraphQL Admin API</h2>
<p>The GraphQL Admin API now includes the <code>shippingLabelPurchase</code> mutation, which lets apps purchase Shopify Shipping labels for eligible fulfillment orders.</p>
<p>Apps can provide the fulfillment order, shipping date and time, package details, total weight, customer notification preference, and optional preferred carrier/service selection. If a preferred rate isn't provided, Shopify selects the cheapest available rate.</p>
<p>Label purchase runs asynchronously. The mutation returns a <code>ShippingLabelPurchaseResult</code>, which apps can poll to track the request status:</p>
<ul>
<li><code>PENDING_PURCHASE</code>: the purchase is still processing.</li>
<li><code>PURCHASED</code>: the label was purchased successfully, and the purchased labels are available on <code>shippingLabels</code>.</li>
<li><code>PURCHASE_FAILED</code>: the purchase failed, and details are available on <code>errors</code>.</li>
</ul>
<h2>Requirements</h2>
<p>The mutation requires the <code>write_orders</code> access scope and a user with the <code>buy_shipping_labels</code> permission. Shops must also accept the Shopify Shipping terms of service before purchasing labels through the API.</p>
<h2>Related documentation</h2>
<ul>
<li><a href="https://shopify.dev/docs/api/admin-graphql/unstable/mutations/shippingLabelPurchase" target="_blank" class="body-link"><code>shippingLabelPurchase</code> mutation</a></li>
<li><a href="https://shopify.dev/docs/api/admin-graphql/unstable/input-objects/ShippingLabelPurchaseInput" target="_blank" class="body-link"><code>ShippingLabelPurchaseInput</code></a></li>
<li><a href="https://shopify.dev/docs/api/admin-graphql/unstable/objects/ShippingLabelPurchaseResult" target="_blank" class="body-link"><code>ShippingLabelPurchaseResult</code></a></li>
<li><a href="https://shopify.dev/docs/api/admin-graphql/unstable/enums/ShippingLabelPurchaseResultStatus" target="_blank" class="body-link"><code>ShippingLabelPurchaseResultStatus</code></a></li>
</ul>
</div> ]]></description>
    <pubDate>Wed, 17 Jun 2026 15:45:00 +0000</pubDate>
    <atom:published>2026-06-17T15:45:00.000Z</atom:published>
    <atom:updated>2026-06-17T15:45:00.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <category>Admin GraphQL API</category>
    <category>2026-07</category>
    <link>https://shopify.dev/changelog/label-purchase-mutation</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/label-purchase-mutation</guid>
  </item>
  <item>
    <title>New Collection model and APIs now available</title>
    <description><![CDATA[ <div class=""><p>The 2026-07 release replaces a collection’s single <code>ruleSet</code> with a multi-source model in the GraphQL Admin API. Each collection now has one or more <code>CollectionSource</code> objects that define typed inclusion and exclusion conditions, plus manual selections. Shopify Functions also gain variant-level collection membership fields on the <code>ProductVariant</code> type.</p>
<p>In API version 2026-07 and later, collections that use the new sources model are returned from <code>collections</code> queries, <code>collection(id:)</code> lookups, and other collection-returning fields. In earlier API versions, those same collections using new features are filtered out because the legacy <code>ruleSet</code> shape can’t represent them. Migrate to the 2026-07 API version to see and manage all collections in a shop.</p>
<p>These changes are non-breaking: deprecated members remain queryable in 2026-07 so you can migrate incrementally.</p>
<h2>What’s new in the GraphQL Admin API</h2>
<h3>Collection sources and conditions</h3>
<p>A new <code>Collection.sources</code> field returns one or more <a href="https://shopify.dev/docs/api/admin-graphql/2026-07/interfaces/CollectionSource" target="_blank" class="body-link">sources</a> that back the collection. Two concrete types implement the new <code>CollectionSource</code> interface:</p>
<ul>
<li><a href="https://shopify.dev/docs/api/admin-graphql/unstable/objects/CollectionConditionsSource" target="_blank" class="body-link"><code>CollectionConditionsSource</code></a>: includes products through typed inclusion <code>conditions</code> plus manual <code>selections</code>, and can optionally exclude products through exclusion <code>conditions</code>. Each source must target either <code>PRODUCTS</code> or <code>VARIANTS</code>, set by the new <code>CollectionSourceTargetType</code> enum.</li>
<li><a href="https://shopify.dev/docs/api/admin-graphql/2026-07/objects/CollectionSubCollectionsSource" target="_blank" class="body-link"><code>CollectionSubCollectionsSource</code></a>: pulls membership from one or more referenced collections.</li>
</ul>
<p>Conditions are strongly typed: each condition uses a concrete type with a matching input type. Exclusion conditions include a subset of inclusion conditions or use a collection-based exclusion condition to target specific collections. Matching behavior for a set of conditions is controlled by the new <code>CollectionConditionMatchType</code> enum: <code>ANY</code> means at least one condition must match; <code>ALL</code> means every condition must match.</p>
<p>To define sources on a collection, <code>collectionCreate</code> and <code>collectionUpdate</code> now accept a <code>collection</code> argument typed as the new <code>CollectionCreateInput</code> or <code>CollectionUpdateInput</code>. <code>CollectionUpdateInput</code> exposes <code>sourcesToCreate</code>, <code>sourcesToUpdate</code>, and <code>sourcesToDelete</code> so you can update sources incrementally without replacing the entire collection definition.</p>
<h3>Shareable app collection sources</h3>
<p>A <code>CollectionConditionsSource</code> whose <code>shareable</code> field is <code>true</code> is owned by the calling app and can be linked to many of the shop’s collections. Use three new mutations to manage these shareable sources, and two new top-level queries to discover them:</p>
<ul>
<li><a href="https://shopify.dev/docs/api/admin-graphql/2026-07/mutations/collectionConditionsSourceCreate" target="_blank" class="body-link"><code>collectionConditionsSourceCreate</code></a>, <a href="https://shopify.dev/docs/api/admin-graphql/2026-07/mutations/collectionConditionsSourceUpdate" target="_blank" class="body-link"><code>collectionConditionsSourceUpdate</code></a>, and <a href="https://shopify.dev/docs/api/admin-graphql/2026-07/mutations/collectionConditionsSourceDelete" target="_blank" class="body-link"><code>collectionConditionsSourceDelete</code></a> manage an app's own shareable sources.</li>
<li><a href="https://shopify.dev/docs/api/admin-graphql/2026-07/queries/collectionConditionsSources" target="_blank" class="body-link"><code>collectionConditionsSources(appId:)</code></a> returns the shareable sources owned by a specific app.</li>
<li><a href="https://shopify.dev/docs/api/admin-graphql/2026-07/queries/collectionConditionsSourcesByApp" target="_blank" class="body-link"><code>collectionConditionsSourcesByApp</code></a> paginates the apps that publish shareable sources for the shop.</li>
</ul>
<p>To attach a shareable source to a specific collection, use <code>CollectionShareableSourceInput { sourceId }</code> inside the <code>sources</code> or <code>sourcesToCreate</code> field of the collection’s create or update input. Only the owning app can update or delete its shareable sources. Deleting a shareable source automatically detaches it from every collection that links to it.</p>
<p>Use shareable sources only when the same logic should be reused across multiple collections. If not, use collection mutations to create, update, or delete sources.</p>
<h3>Other additions</h3>
<ul>
<li><a href="https://shopify.dev/docs/api/admin-graphql/2026-07/objects/Collection#field-subcollectioneligibility" target="_blank" class="body-link"><code>Collection.subCollectionEligibility</code></a> returns separate <code>inclusion</code> and <code>exclusion</code> eligibility states for using the collection as a sub-collection target, with a stable <code>SubCollectionIneligibleReason</code> enum.</li>
<li><a href="https://shopify.dev/docs/api/admin-graphql/2026-07/queries/collectionConditionMetafieldDefinitions" target="_blank" class="body-link"><code>collectionConditionMetafieldDefinitions</code></a> returns the metafield definitions that can be used in inclusion conditions, scoped to the calling app's access.</li>
<li><a href="https://shopify.dev/docs/api/admin-graphql/2026-07/input-objects/CollectionSourceExclusionConditionUpdateInput" target="_blank" class="body-link"><code>CollectionSourceExclusionConditionUpdateInput</code></a> gains a <code>collection</code> field, so you can update a collection-based exclusion condition in place instead of deleting and recreating it.</li>
</ul>
<h2>Variant-level collection membership in Shopify Functions</h2>
<p>The <code>ProductVariant</code>type in Shopify Functions gains two new fields:</p>
<ul>
<li><code>inAnyCollection(ids: [ID!]!): Boolean!</code> returns <code>true</code> when the variant is in any of the specified collections.</li>
<li><code>inCollections(ids: [ID!]!): [CollectionMembership!]!</code> returns per-collection membership for the variant.</li>
</ul>
<p>A variant is a member of a collection when the variant itself is included in that collection. Existing <code>Product.inAnyCollection</code> and <code>Product.inCollections</code> continue to return <code>true</code> when the full product is in any of the specified collections, regardless of variant-level membership.</p>
<h2>Deprecations</h2>
<ul>
<li><code>Collection.ruleSet</code> is deprecated in favor of <code>Collection.sources</code>. Each <code>ruleSet</code> rule has an equivalent inclusion condition (for example, a tag rule maps to <code>CollectionSourceInclusionConditionProductTag</code>). Sub-collections, exclusion conditions, and multiple sources aren’t supported in the legacy shape.</li>
<li><code>collectionCreate(input:)</code> and <code>collectionUpdate(input:)</code> are deprecated in favor of <code>collectionCreate(collection:)</code> and <code>collectionUpdate(collection:)</code>. The legacy <code>input</code> argument continues to accept <code>CollectionInput</code> (with its <code>ruleSet</code> field), but only the new <code>collection</code> argument can define <code>sources</code>. If both arguments are supplied, the <code>collection</code> argument takes precedence.</li>
<li>If your app reads <code>Collection.ruleSet</code> or writes <code>input.ruleSet</code>, switch to <code>Collection.sources</code> and the new <code>collection</code> argument. The legacy shape can’t express multiple sources, exclusion conditions, or shareable sources, and collections that use those features are filtered out of pre-2026-07 query results.</li>
<li>If your Function needs variant-level collection membership, call <code>inAnyCollection</code> or <code>inCollections</code> on <code>ProductVariant</code>. The existing <code>Product.inAnyCollection</code> and <code>Product.inCollections</code> fields continue to return product-level membership.</li>
</ul>
</div> ]]></description>
    <pubDate>Wed, 17 Jun 2026 13:00:00 +0000</pubDate>
    <atom:published>2026-06-17T13:00:00.000Z</atom:published>
    <atom:updated>2026-06-22T12:29:55.000Z</atom:updated>
    <category>Action Required</category>
    <category>API</category>
    <category>New</category>
    <category>Admin GraphQL API</category>
    <category>Functions</category>
    <category>2026-07</category>
    <link>https://shopify.dev/changelog/new-collection-model-and-apis-now-available</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/new-collection-model-and-apis-now-available</guid>
  </item>
  <item>
    <title>Metafields now require a definition to be accessed through the Customer Account API</title>
    <description><![CDATA[ <div class=""><p>Starting today, metafields stored on the app resource must have a metafield <a href="https://shopify.dev/docs/apps/build/metafields#metafield-definitions" target="_blank" class="body-link">definition</a> and customer accounts <a href="https://shopify.dev/docs/apps/build/metafields#customer-accounts-permissions" target="_blank" class="body-link">permissions</a> to be accessible through the Customer Account API. Going forward, when calling the Customer Accounts API, app metafields without a definition will no longer return a value. If your app has functionality which depends on these fields, update those metafields to use definitions with the Customer Account API permission to avoid disruption.</p>
<h2>Action required:</h2>
<p>You must ensure that every metafield your app uses for customer account UI extensions, a Hydrogen or a Headless store, has a definition. </p>
<ul>
<li>Run the <a href="https://shopify.dev/docs/api/admin-graphql/latest/mutations/metafieldDefinitionCreate" target="_blank" class="body-link">metafieldDefinitionCreate</a> for every store that installs your app to ensure the metafields are correctly defined. </li>
<li>For app-owned metafields, configure <a href="https://shopify.dev/docs/apps/build/metafields/definitions#toml-app-owned-example" target="_blank" class="body-link">declarative metafields</a> in your app’s TOML file.</li>
<li>Configure the <a href="https://shopify.dev/docs/apps/build/metafields#customer-accounts-permissions" target="_blank" class="body-link">access settings</a> on your definition to allow customer accounts API access.</li>
</ul>
<p><em>Metafields owned by Customer or Order resources will not be affected by this change.</em></p>
</div> ]]></description>
    <pubDate>Tue, 16 Jun 2026 16:00:00 +0000</pubDate>
    <atom:published>2026-06-16T16:00:00.000Z</atom:published>
    <atom:updated>2026-06-16T21:51:13.000Z</atom:updated>
    <category>Action Required</category>
    <category>Platform</category>
    <category>Update</category>
    <link>https://shopify.dev/changelog/metafields-now-require-a-definition-to-be-accessed-through-the-customer-account-api</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/metafields-now-require-a-definition-to-be-accessed-through-the-customer-account-api</guid>
  </item>
  <item>
    <title>New appSubscriptionCancel mutation in the Partner API   </title>
    <description><![CDATA[ <div class=""><p>Starting with API version 2026-07, Partner API clients can use the new <a href="https://shopify.dev/docs/api/partner/2026-07/app-subscription-cancel" target="_blank" class="body-link"><code>appSubscriptionCancel</code></a> mutation to cancel app subscriptions for public apps they own.</p>
<p>The mutation supports:</p>
<ul>
<li>Immediate cancellation</li>
<li>Deferred cancellation at the end of the current billing cycle</li>
<li>Requesting prorated credits, when applicable</li>
<li>Optionally skipping the final usage charge for usage-billed subscriptions</li>
</ul>
<p>This mutation is available to Partner API clients that have the <strong>View financials</strong> permission in the Partner Dashboard.</p>
<p>Learn more in the <a href="https://shopify.dev/docs/api/partner/2026-07" target="_blank" class="body-link">Partner API 2026-07 documentation</a>.</p>
</div> ]]></description>
    <pubDate>Tue, 16 Jun 2026 16:00:00 +0000</pubDate>
    <atom:published>2026-06-16T16:00:00.000Z</atom:published>
    <atom:updated>2026-06-16T16:00:00.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <category>2026-07</category>
    <link>https://shopify.dev/changelog/new-appsubscriptioncancel-mutation-in-the-partner-api</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/new-appsubscriptioncancel-mutation-in-the-partner-api</guid>
  </item>
  <item>
    <title>Shop User Metafields in Shopify Functions</title>
    <description><![CDATA[ <div class=""><p>Shop User is Shopify’s cross-merchant buyer identity. Partners who use metafields on Shop Users can now read those metafields during checkout using Shopify Functions. To learn more, see the Shop User metafields guide in the Shopify developer documentation: <a href="https://shopify.dev/docs/api/shop/guides/use-cases/metafields" target="_blank" class="body-link">https://shopify.dev/docs/api/shop/guides/use-cases/metafields</a></p>
</div> ]]></description>
    <pubDate>Sat, 13 Jun 2026 16:00:00 +0000</pubDate>
    <atom:published>2026-06-13T16:00:00.000Z</atom:published>
    <atom:updated>2026-06-13T16:00:00.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <category>Functions</category>
    <category>2026-07</category>
    <link>https://shopify.dev/changelog/shop-user-metafields-in-shopify-functions</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/shop-user-metafields-in-shopify-functions</guid>
  </item>
  <item>
    <title>Read a cart line's `viewKey` from the `CartLine` type</title>
    <description><![CDATA[ <div class=""><p>The <a href="https://shopify.dev/docs/api/storefront/2026-07/objects/CartLine" target="_blank" class="body-link"><code>CartLine</code></a> type now exposes a <code>viewKey</code> field, so you can correlate a returned cart line with the <code>viewKey</code> you sent to <a href="https://shopify.dev/docs/api/storefront/2026-07/mutations/cartLinesUpdate" target="_blank" class="body-link"><code>cartLinesUpdate</code></a> and <a href="https://shopify.dev/docs/api/storefront/2026-07/mutations/cartLinesRemove" target="_blank" class="body-link"><code>cartLinesRemove</code></a>.</p>
<h2>What's new</h2>
<ul>
<li><code>CartLine.viewKey</code> returns the same <code>viewKey</code> your Liquid storefront renders, alongside the existing UUID <code>id</code>.</li>
</ul>
<h2>How to use</h2>
<p>Previously, identifying a line by <code>viewKey</code> was input-only: you could send a <code>viewKey</code>, but the response returned a UUID <code>id</code> with no <code>viewKey</code> to map back. You can now read it directly off the line.</p>
<pre><code class="language-graphql">query CartLines($cartId: ID!) {
  cart(id: $cartId) {
    lines(first: 10) {
      edges {
        node {
          id
          viewKey
        }
      }
    }
  }
}
</code></pre>
<p>The field reads a value the cart already stores, so existing UUID-based correlation keeps working unchanged.</p>
</div> ]]></description>
    <pubDate>Fri, 12 Jun 2026 17:00:00 +0000</pubDate>
    <atom:published>2026-06-12T17:00:00.000Z</atom:published>
    <atom:updated>2026-06-12T17:00:00.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <category>Storefront API</category>
    <category>2026-07</category>
    <link>https://shopify.dev/changelog/cart-line-view-key-field</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/cart-line-view-key-field</guid>
  </item>
  <item>
    <title>Shopify AI Toolkit for upgrading extensions to Polaris web components</title>
    <description><![CDATA[ <div class=""><p>The Shopify AI Toolkit now supports upgrading checkout and customer account UI extensions to new API versions, including the migration to Polaris web components. Use the AI Toolkit with your preferred AI coding agent to skip repetitive manual work and speed up the heavy lifting.</p>
<p>Your agent will leverage the Shopify AI Toolkit, paired with our enhanced developer documentation, to go through the required migration steps such as handling React to Preact conversion, mapping and replacing legacy components with Polaris web components, and updating extension APIs.</p>
<p>Extensions built with Polaris web components render significantly faster than legacy React extensions, ensuring optimal loading time and extension performance.</p>
<h2>Required for future app updates after October 1, 2026</h2>
<p><a href="https://shopify.dev/docs/api/usage/versioning#versioned-and-unversioned-apis" target="_blank" class="body-link">Shopify CLI blocks apps from being updated</a> if any of their extensions are on an API version that is more than 1 year old. By <strong>October 1, 2026</strong>, any app that contains checkout and customer account UI extensions on API versions 2025-07 or earlier will be unable to be updated.</p>
<p>All API versions 2025-10 and later use Polaris web components by default. Upgrade your extensions to the latest API version and adopt Polaris web components now to avoid this restriction.</p>
<h2>Get Started</h2>
<p>Install the <a href="https://shopify.dev/docs/apps/build/ai-toolkit" target="_blank" class="body-link">Shopify AI Toolkit</a> and follow our dev docs to run the skill in your AI agent:</p>
<ul>
<li><a href="https://shopify.dev/docs/apps/build/checkout/migrate-to-web-components#migrate-using-ai" target="_blank" class="body-link">Checkout UI extension migration doc</a></li>
<li><a href="https://shopify.dev/docs/apps/build/customer-accounts/migrate-to-web-components#migrate-using-ai" target="_blank" class="body-link">Customer account UI extension migration doc</a></li>
</ul>
</div> ]]></description>
    <pubDate>Thu, 11 Jun 2026 18:00:00 +0000</pubDate>
    <atom:published>2026-06-11T18:00:00.000Z</atom:published>
    <atom:updated>2026-06-11T19:38:28.000Z</atom:updated>
    <category>Action Required</category>
    <category>Tools</category>
    <category>Update</category>
    <link>https://shopify.dev/changelog/shopify-ai-toolkit-for-upgrading-extensions-to-polaris-web-components</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/shopify-ai-toolkit-for-upgrading-extensions-to-polaris-web-components</guid>
  </item>
  <item>
    <title>Streamlined Metaobject API</title>
    <description><![CDATA[ <div class=""><p>It’s now easier to work with metaobjects. </p>
<p>With <a href="https://shopify.dev/docs/api/admin-graphql/2026-07/objects/Metaobject#field-Metaobject.fields.values" target="_blank" class="body-link">the new <code>values</code> property</a>, you can fetch all fields of a metaobject in a single call without handling deserialization in your app. The API returns a JSON-compatible object that’s ready to use directly.</p>
<p>You can also use <code>values</code> when <a href="https://shopify.dev/docs/api/admin-graphql/2026-07/mutations/metaobjectUpsert#arguments-values" target="_blank" class="body-link">creating or updating metaobjects</a>. Provide a JSON-style object that matches your metaobject’s field keys, and the API handles serialization for you. Optional fields are straightforward as well: any fields defined on the Metaobject that you omit from <code>values</code> are cleared.</p>
<p>You can continue to use <a href="https://shopify.dev/docs/api/admin-graphql/2026-07/objects/Metaobject#field-Metaobject.fields.field" target="_blank" class="body-link"><code>field</code></a> and <a href="https://shopify.dev/docs/api/admin-graphql/2026-07/objects/Metaobject#field-Metaobject.fields.fields" target="_blank" class="body-link"><code>fields</code></a> if you need additional details about a field (such as <a href="https://shopify.dev/docs/api/admin-graphql/2026-07/objects/Metaobject#field-Metaobject.fields.type" target="_blank" class="body-link"><code>type</code></a>), or if you prefer patch-style behavior when mutating metaobjects, where any unspecified fields are left as-is.</p>
</div> ]]></description>
    <pubDate>Thu, 11 Jun 2026 16:00:00 +0000</pubDate>
    <atom:published>2026-06-11T16:00:00.000Z</atom:published>
    <atom:updated>2026-06-12T15:01:35.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <category>Admin GraphQL API</category>
    <category>2026-07</category>
    <link>https://shopify.dev/changelog/streamlined-metaobject-api</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/streamlined-metaobject-api</guid>
  </item>
  <item>
    <title>Headless checkout SSO is now documented with sso=silent</title>
    <description><![CDATA[ <div class=""><p>We’ve updated our headless checkout authentication docs to refer to the silent single sign-on query parameter as <code>sso=silent</code> instead of <code>logged_in=true</code>.</p>
<p>This is a terminology and documentation update only. Existing checkout URLs that use <code>logged_in=true</code> will continue to work. Going forward, Shopify docs and examples will use <code>sso=silent</code> when describing the silent SSO flow from a headless storefront to checkout.</p>
<p>Learn more about <a href="/docs/storefronts/headless/building-with-the-customer-account-api/checkout-authentication" target="_blank" class="body-link">authenticating buyers in checkout</a>.</p>
</div> ]]></description>
    <pubDate>Mon, 08 Jun 2026 16:00:00 +0000</pubDate>
    <atom:published>2026-06-08T16:00:00.000Z</atom:published>
    <atom:updated>2026-06-08T16:00:00.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <category>Customer Account API</category>
    <category>Hydrogen</category>
    <category>Storefront API</category>
    <link>https://shopify.dev/changelog/headless-checkout-sso-is-now-documented-with-ssosilent</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/headless-checkout-sso-is-now-documented-with-ssosilent</guid>
  </item>
  <item>
    <title>`GiftCardCashOutTransaction` is now resolvable from `GiftCardTransaction`</title>
    <description><![CDATA[ <div class=""><p>Starting with GraphQL Admin API version 2026-07, the [<code>GiftCardCashOutTransaction</code>](<a href="https://shopify.dev/docs/api/admin-graphql/2026-07/objects/GiftCardCashOutTransaction" target="_blank" class="body-link">https://shopify.dev/docs/api/admin-graphql/2026-07/objects/GiftCardCashOutTransaction</a> type is introduced as a new variant of the <code>GiftCardTransaction</code> interface. This type specifically represents transactions where a gift card balance is paid out through a point of sale (POS) system.</p>
<p>In previous API versions, such as 2026-04 and earlier, these transactions were classified as <code>GiftCardDebitTransaction</code>. From version 2026-07 onwards, they are identified as <code>GiftCardCashOutTransaction</code>. To accurately differentiate cash-out transactions from credit and debit transactions, use the <code>__typename</code> field when querying <code>giftCard.transactions</code>.</p>
<p>Below is an example query:</p>
<pre><code class="language-graphql">giftCard(id: &quot;...&quot;) {
  transactions(first: 10) {
    nodes {
      __typename
      ... on GiftCardCashOutTransaction {
        id
        amount { amount currencyCode }
      }
    }
  }
}
</code></pre>
</div> ]]></description>
    <pubDate>Fri, 05 Jun 2026 16:00:00 +0000</pubDate>
    <atom:published>2026-06-05T16:00:00.000Z</atom:published>
    <atom:updated>2026-06-05T16:00:00.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <category>Admin GraphQL API</category>
    <category>2026-07</category>
    <link>https://shopify.dev/changelog/giftcardcashouttransaction-now-resolvable-from-giftcardtransaction</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/giftcardcashouttransaction-now-resolvable-from-giftcardtransaction</guid>
  </item>
  <item>
    <title>Local currency support gift cards now available in the GraphQL Admin API</title>
    <description><![CDATA[ <div class=""><p>Starting in API version <code>2026-07</code>, the GraphQL Admin API supports local currency gift cards. You can create gift card products that are issued in a specific currency, and control whether buyers can redeem those gift cards across currencies. If your app creates gift cards directly, migrate from the deprecated <code>initialValue</code> field to <code>initialAmount</code>.</p>
<h2>What changed</h2>
<p>Use the new <a href="https://shopify.dev/docs/api/admin-graphql/2026-07/mutations/giftCardProductSet" target="_blank" class="body-link"><code>giftCardProductSet</code></a> mutation to create and update gift card products. The input includes <a href="https://shopify.dev/docs/api/admin-graphql/2026-07/input-objects/GiftCardProductSetInput#field-GiftCardProductSetInput.fields.issuanceCurrency" target="_blank" class="body-link"><code>issuanceCurrency</code></a> and <a href="https://shopify.dev/docs/api/admin-graphql/2026-07/input-objects/GiftCardProductSetInput#field-GiftCardProductSetInput.fields.crossCurrencyRedeemable" target="_blank" class="body-link"><code>crossCurrencyRedeemable</code></a>, and automatically applies the product’s gift card settings to its variants. You can set <code>issuanceCurrency</code> and <code>crossCurrencyRedeemable</code> only when you create the product; you can’t change either field afterward.</p>
<p>Inspect a product’s settings through <a href="https://shopify.dev/docs/api/admin-graphql/2026-07/objects/Product#field-Product.fields.giftCardSettings" target="_blank" class="body-link"><code>Product.giftCardSettings</code></a>. If <a href="https://shopify.dev/docs/api/admin-graphql/2026-07/objects/GiftCardProductSettings#field-GiftCardProductSettings.fields.issuanceCurrency" target="_blank" class="body-link"><code>issuanceCurrency</code></a> is <code>null</code>, Shopify issues gift cards from the product in the shop’s currency. If <code>issuanceCurrency</code> is set, Shopify issues gift cards in the specified currency, and buyers can purchase the product only in that currency. Publish these products only in markets where that currency is supported.</p>
<p><a href="https://shopify.dev/docs/api/admin-graphql/2026-07/objects/GiftCardProductSettings#field-GiftCardProductSettings.fields.crossCurrencyRedeemable" target="_blank" class="body-link"><code>crossCurrencyRedeemable</code></a> controls redemption behavior across currencies:</p>
<ul>
<li>If <code>crossCurrencyRedeemable</code> is <code>false</code>, issued gift cards use a <code>crossCurrencyRedemptionStrategy</code> of <a href="https://shopify.dev/docs/api/admin-graphql/2026-07/enums/GiftCardCrossCurrencyRedemptionStrategy#enums-NONE" target="_blank" class="body-link"><code>NONE</code></a>.</li>
<li>If <code>crossCurrencyRedeemable</code> is <code>true</code> and the product has no issuance currency, gift cards use <a href="https://shopify.dev/docs/api/admin-graphql/2026-07/enums/GiftCardCrossCurrencyRedemptionStrategy#enums-MARKET_FX" target="_blank" class="body-link"><code>MARKET_FX</code></a>.</li>
<li>If <code>crossCurrencyRedeemable</code> is <code>true</code> and the product has an issuance currency, gift cards use <a href="https://shopify.dev/docs/api/admin-graphql/2026-07/enums/GiftCardCrossCurrencyRedemptionStrategy#enums-SPOT_FX" target="_blank" class="body-link"><code>SPOT_FX</code></a>.</li>
</ul>
<p>Gift card creation now accepts <a href="https://shopify.dev/docs/api/admin-graphql/2026-07/input-objects/GiftCardCreateInput#field-GiftCardCreateInput.fields.initialAmount" target="_blank" class="body-link"><code>initialAmount</code></a>, which replaces the deprecated <code>initialValue</code> field. <code>initialAmount</code> includes both the amount and currency. Query <a href="https://shopify.dev/docs/api/admin-graphql/2026-07/objects/GiftCard#field-GiftCard.fields.isRedeemable" target="_blank" class="body-link"><code>GiftCard.isRedeemable</code></a> and <a href="https://shopify.dev/docs/api/admin-graphql/2026-07/objects/GiftCard#field-GiftCard.fields.crossCurrencyRedemptionStrategy" target="_blank" class="body-link"><code>GiftCard.crossCurrencyRedemptionStrategy</code></a> to check whether a gift card can be redeemed and how cross-currency conversion is handled.</p>
<h2>What to do</h2>
<ol>
<li>If you create gift cards using <code>giftCardCreate</code>, replace <code>initialValue</code> with <code>initialAmount</code> before you upgrade to <code>2026-07</code>.  </li>
<li>If you offer multi-currency stores, decide whether new gift card products should be pinned to a single issuance currency. Configure <code>issuanceCurrency</code> and <code>crossCurrencyRedeemable</code> when you create the product; you can’t change either field afterward.  </li>
<li>Update redemption flows to read <code>GiftCard.crossCurrencyRedemptionStrategy</code> so you can surface accurate cross-currency conversion behavior to merchants and buyers.</li>
</ol>
<h2>Related docs</h2>
<ul>
<li><a href="https://shopify.dev/docs/api/admin-graphql/2026-07/mutations/giftCardProductSet" target="_blank" class="body-link"><code>giftCardProductSet</code> mutation</a>  </li>
<li><a href="https://shopify.dev/docs/api/admin-graphql/2026-07/objects/GiftCard" target="_blank" class="body-link"><code>GiftCard</code> object</a>  </li>
<li><a href="https://shopify.dev/docs/api/admin-graphql/2026-07/objects/Product#field-Product.fields.giftCardSettings" target="_blank" class="body-link"><code>Product.giftCardSettings</code></a>  </li>
<li><a href="https://shopify.dev/docs/api/admin-graphql/2026-07/enums/GiftCardCrossCurrencyRedemptionStrategy" target="_blank" class="body-link"><code>GiftCardCrossCurrencyRedemptionStrategy</code> enum</a></li>
</ul>
</div> ]]></description>
    <pubDate>Fri, 05 Jun 2026 16:00:00 +0000</pubDate>
    <atom:published>2026-06-05T16:00:00.000Z</atom:published>
    <atom:updated>2026-06-05T21:20:18.000Z</atom:updated>
    <category>API</category>
    <category>Update</category>
    <category>Admin GraphQL API</category>
    <category>2026-07</category>
    <link>https://shopify.dev/changelog/gift-card-local-currency-support</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/gift-card-local-currency-support</guid>
  </item>
  <item>
    <title>Inventory transfer webhooks include origin and destination location IDs, and mutation documentation clarified</title>
    <description><![CDATA[ <div class=""><h3>Inventory transfer webhooks: new origin and destination fields</h3>
<p> Payloads for the following webhook topics now include the source and destination location of the transfer as Location
 Global IDs:</p>
<ul>
<li><a href="https://shopify.dev/docs/api/webhooks/latest?accordionItem=webhooks-inventory_transfers-add_items&reference=toml" target="_blank" class="body-link"><code>inventory_transfers/add_items</code></a></li>
<li><a href="https://shopify.dev/docs/api/webhooks/latest?accordionItem=webhooks-inventory_transfers-update_item_quantities&reference=toml" target="_blank" class="body-link"><code>inventory_transfers/update_item_quantities</code></a></li>
<li><a href="https://shopify.dev/docs/api/webhooks/latest?accordionItem=webhooks-inventory_transfers-remove_items&reference=toml" target="_blank" class="body-link"><code>inventory_transfers/remove_items</code></a></li>
<li><a href="https://shopify.dev/docs/api/webhooks/latest?accordionItem=webhooks-inventory_transfers-ready_to_ship&reference=toml" target="_blank" class="body-link"><code>inventory_transfers/ready_to_ship</code></a></li>
<li><a href="https://shopify.dev/docs/api/webhooks/latest?accordionItem=webhooks-inventory_transfers-cancel&reference=toml" target="_blank" class="body-link"><code>inventory_transfers/cancel</code></a></li>
<li><a href="https://shopify.dev/docs/api/webhooks/latest?accordionItem=webhooks-inventory_transfers-complete&reference=toml" target="_blank" class="body-link"><code>inventory_transfers/complete</code></a></li>
</ul>
<p> Each payload now includes:</p>
<ul>
<li><strong>origin.id</strong>: For example, <code>gid://shopify/Location/123</code></li>
<li>**destination.id **: For example, <code>gid://shopify/Location/456</code></li>
</ul>
<p> You can use these IDs to identify where inventory is moving without making an additional API call to fetch the
 transfer.</p>
<p>The new fields are scoped to subscriptions whose webhook API version includes this change. The new functionality is available now on the unstable API version and will be in the upcoming public API release <code>2026-07</code>. See the Inventory transfer webhook reference for details.</p>
<p> If your subscription is on an earlier version, or the transfer's source or destination is not a location (for example, a supplier-fulfilled
 transfer), the keys are omitted from the payload entirely rather than returned as null.</p>
<h3>Clarified documentation for <code>inventoryTransferSetItems</code></h3>
<p> We've updated the description on <a href="https://shopify.dev/docs/api/admin-graphql/latest/mutations/inventoryTransferSetItems" target="_blank" class="body-link"><code>inventoryTransferSetItems</code></a> to better describe how it actually behaves. The behavior itself hasn't changed.</p>
<ul>
<li><code>inventoryTransferSetItems</code> sets the quantity for each line item you pass, either adding it if it's not already on the transfer or updating it if it is. Line items you don't pass are unchanged.  Each <code>inventoryItemId</code> may appear at most once per call.</li>
<li>On a <code>READY_TO_SHIP</code> or <code>IN_PROGRESS</code> transfer, the quantity you pass replaces only the <code>processableQuantity</code>;
 already-shipped or picked quantity is preserved, and the resulting total is the preserved portion plus the provided
 quantity.</li>
<li>quantity: 0 is only valid on DRAFT transfers, where it leaves a zero-quantity line item on the transfer. To remove
 a line item, use <a href="https://shopify.dev/docs/api/admin-graphql/latest/mutations/inventoryTransferRemoveItems" target="_blank" class="body-link"><code>inventoryTransferRemoveItems</code></a>. On <code>READY_TO_SHIP</code> or <code>IN_PROGRESS</code> transfers, 0 returns an
 <code>INVALID_QUANTITY</code> error.</li>
</ul>
<h3>Clarified documentation for <code>inventoryTransferRemoveItems</code></h3>
<p> We've also updated the description on <a href="https://shopify.dev/docs/api/admin-graphql/latest/mutations/inventoryTransferRemoveItems" target="_blank" class="body-link"><code>inventoryTransferRemoveItems</code></a> to better describe its behavior:</p>
<ul>
<li>The mutation can be called on transfers in <code>DRAFT</code> or <code>READY_TO_SHIP</code> status.</li>
<li>You can remove items from In Transit shipments (using <code>InventoryShipmentRemoveItem</code>) and then remove it from the Transfer if the quantity has been placed on a shipment.</li>
<li>For each line item you reference, if its full quantity is still unallocated to a shipment, then the line item is
 removed. Otherwise, the line item remains on the transfer with its quantity reduced to the allocated portion. Quantity
 allocated to a shipment, such as whether the shipment is still a draft, in transit, or already received, is preserved.</li>
<li>On <code>READY_TO_SHIP</code> transfers, removing items returns the affected reserved quantity to available inventory at the
 origin location.</li>
<li>Passing an omitted or empty <code>transferLineItemIds</code> is now treated as a no-op and returns the transfer unchanged.</li>
<li>To change the quantity of a line item without removing it, use <code>inventoryTransferSetItems</code>.</li>
</ul>
<h3>Clearer error messages on inventory transfer mutations</h3>
<p> Several user errors returned by the inventory transfer mutations now have more descriptive messages so that you can
 act on them without consulting additional docs:</p>
<ul>
<li><a href="https://shopify.dev/docs/api/admin-graphql/latest/objects/InventoryTransferRemoveItemsUserError#field-InventoryTransferRemoveItemsUserError.fields.code.CANT_REMOVE_ALL_ITEMS_FROM_READY_TO_SHIP_TRANSFER" target="_blank" class="body-link">READY_TO_SHIP_TRANSFER_REQUIRES_AT_LEAST_ONE_ITEM</a> now explains that you can't remove every line item from a <code>READY_TO_SHIP</code> transfer and that, to empty one, you should cancel it instead.</li>
<li><a href="https://shopify.dev/docs/api/admin-graphql/latest/objects/InventoryTransferRemoveItemsUserError#field-InventoryTransferRemoveItemsUserError.fields.code.ALL_QUANTITY_SHIPPED" target="_blank" class="body-link">ALL_QUANTITY_SHIPPED</a> now clarifies that the check fires when the full quantity of the item is allocated to one or more shipments (including draft shipments where the item has been picked), and that the error name refers to the underlying allocation check rather than physical shipment.</li>
<li><a href="https://shopify.dev/docs/api/admin-graphql/latest/objects/InventoryTransferRemoveItemsUserError#field-InventoryTransferRemoveItemsUserError.fields.code.ITEM_PRESENT_ON_DRAFT_SHIPMENT_WITH_ZERO_QUANTITY" target="_blank" class="body-link">ITEM_PRESENT_ON_DRAFT_SHIPMENT_WITH_ZERO_QUANTITY</a> now states plainly that the line item appears on a draft shipment with quantity 0.</li>
</ul>
<p> Error codes themselves are unchanged, so existing handling in your apps continues to work.</p>
</div> ]]></description>
    <pubDate>Fri, 05 Jun 2026 16:00:00 +0000</pubDate>
    <atom:published>2026-06-05T16:00:00.000Z</atom:published>
    <atom:updated>2026-06-05T16:00:00.000Z</atom:updated>
    <category>API</category>
    <category>Update</category>
    <category>Admin GraphQL API</category>
    <category>2026-07</category>
    <link>https://shopify.dev/changelog/inventory-transfer-webhooks-include-origin-and-destination-location-ids-and-mutation-documentation-clarified</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/inventory-transfer-webhooks-include-origin-and-destination-location-ids-and-mutation-documentation-clarified</guid>
  </item>
  <item>
    <title>App quality checks now managed in Partner Dashboard</title>
    <description><![CDATA[ <div class=""><p>The end-to-end review management experience previously launched for <a href="https://shopify.dev/changelog/new-app-submission-experience-in-the-partner-dashboard" target="_blank" class="body-link">new app submissions in the Partner Dashboard</a> now also applies to app audits.</p>
<p>When a published app undergoes a quality check and requires changes, that feedback appears in the Partner Dashboard under App &gt; Distribution. You’ll see the same requirement-level tracking, a structured fix workflow, and direct messaging used for app submissions.</p>
<p><strong>What to do if your app has an active audit</strong></p>
<p>If your published app currently has an open audit with outstanding issues, review and manage all feedback in the Partner Dashboard under App &gt; Distribution. Use your app’s status page there to see required changes, update your app, and respond to the review team, instead of checking your email inbox.</p>
</div> ]]></description>
    <pubDate>Tue, 02 Jun 2026 19:00:00 +0000</pubDate>
    <atom:published>2026-06-02T19:00:00.000Z</atom:published>
    <atom:updated>2026-06-02T19:00:00.000Z</atom:updated>
    <category>App store</category>
    <category>New</category>
    <link>https://shopify.dev/changelog/app-quality-checks-now-managed-in-partner-dashboard</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/app-quality-checks-now-managed-in-partner-dashboard</guid>
  </item>
  <item>
    <title>Identify cart lines by `view_key` in `cartLinesUpdate` and `cartLinesRemove`</title>
    <description><![CDATA[ <div class=""><p>You can now identify cart lines by their <code>view_key</code> when calling the <a href="https://shopify.dev/docs/api/storefront/2026-07/mutations/cartLinesUpdate" target="_blank" class="body-link"><code>cartLinesUpdate</code></a> and <a href="https://shopify.dev/docs/api/storefront/2026-07/mutations/cartLinesRemove" target="_blank" class="body-link"><code>cartLinesRemove</code></a> mutations, as an alternative to the cart line <code>id</code>.</p>
<h2>What's new</h2>
<ul>
<li><code>cartLinesUpdate</code> accepts a <code>viewKey</code> on each <code>CartLineUpdateInput</code>, mutually exclusive with <code>id</code>.</li>
<li><code>cartLinesRemove</code> accepts a <code>viewKeys</code> list, mutually exclusive with <code>lineIds</code>.</li>
</ul>
<h2>How to use</h2>
<p>Provide exactly one identifier per line. Existing integrations that use <code>id</code> or <code>lineIds</code> keep working with no changes.</p>
<pre><code class="language-graphql">mutation RemoveLineByViewKey($cartId: ID!) {
  cartLinesRemove(cartId: $cartId, viewKeys: [&quot;794864053:7c2a9f...&quot;]) {
    cart { id }
    userErrors { field message }
  }
}
</code></pre>
</div> ]]></description>
    <pubDate>Tue, 02 Jun 2026 16:00:00 +0000</pubDate>
    <atom:published>2026-06-02T16:00:00.000Z</atom:published>
    <atom:updated>2026-06-03T14:14:36.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <category>Storefront API</category>
    <category>2026-07</category>
    <link>https://shopify.dev/changelog/cart-line-mutations-accept-view-key</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/cart-line-mutations-accept-view-key</guid>
  </item>
  <item>
    <title>Build App Home as a UI extension</title>
    <description><![CDATA[ <div class=""><p>App Home UI extensions are available for custom-distribution apps starting in API version <code>2026-07</code>. They let you build your app's App Home page as a Shopify-hosted Preact UI extension using the <code>admin.app.home.render</code> target, so lightweight apps can ship a primary admin workspace without hosting a separate web app.</p>
<p>The iframe model remains recommended for most apps, especially public apps and apps that need server-side logic. App Home UI extensions give extension-only apps a simpler path when they fit the runtime constraints.</p>
<h2>App Home today</h2>
<p>Every Shopify app has a main experience inside the Shopify admin called App Home. This is where merchants go to configure settings, view data, and manage workflows in your app.</p>
<p>Historically, apps have built App Home with the developer-hosted iframe model. You scaffold an app with Shopify CLI, build it with your preferred web framework, host the app yourself, and Shopify embeds that app inside the admin.</p>
<p>That model is still the right default for most apps because it gives you the full web platform:</p>
<ul>
<li>Use any web framework.  </li>
<li>Host server-side logic and backend routes.  </li>
<li>Use full browser APIs.  </li>
<li>Build multi-page and full-stack app experiences.  </li>
<li>Use App Bridge APIs, App Bridge web components, Polaris web components, and the GraphQL Admin API.  </li>
<li>Ship through public or custom distribution.</li>
</ul>
<p>For many apps, that flexibility is exactly what App Home needs.</p>
<h2>Where the iframe model can be more than you need</h2>
<p>Some apps don't need a full developer-hosted web app just to render their primary admin workspace. A custom-distribution app might be mostly extension-based. An internal workflow app might have a simple dashboard, setup flow, or resource manager. An extension-only app might not need server-side rendering, webhooks, or a separate backend at all.</p>
<p>In those cases, the iframe model can add infrastructure that isn't central to the app's workflow. You still need a hosted web surface for App Home, even when the app's main UI could run in the same extension model as the rest of the app.</p>
<p>App Home UI extensions give those apps another option.</p>
<h2>Introducing App Home UI extensions</h2>
<p>App Home UI extensions are a Shopify-hosted way to build an App Home page. Instead of hosting an iframe-based web app for the primary workspace, you build a Preact UI extension that targets <code>admin.app.home.render</code>.</p>
<p>The extension is configured in <code>shopify.extension.toml</code>:</p>
<pre><code class="language-toml">api_version = &quot;2026-07&quot;

[[extensions]]
name = &quot;t:name&quot;
type = &quot;ui_extension&quot;

  [[extensions.targeting]]
  module = &quot;./src/AppHome.jsx&quot;
  target = &quot;admin.app.home.render&quot;
</code></pre>
<p>With this model, your App Home page runs in the admin extension runtime, renders with Polaris web components, and deploys as part of an app version. Shopify hosts the extension, so there's no separate App Home web server to deploy or maintain.</p>
<h2>How it works</h2>
<p>App Home UI extensions don't replace iframe-based App Home for every app. They give custom-distribution apps a focused path when the extension runtime is enough for the app's main workspace.</p>
<ol>
<li><p><strong>App Home becomes an extension target:</strong> The <code>admin.app.home.render</code> target renders your extension in the App Home area of Shopify admin. Your extension entry module points to a Preact file, such as <code>extensions/app-home/src/AppHome.jsx</code>. The generated template can use client-side routing for simple multi-page flows. For example, a single App Home UI extension can render a home page, a detail page, and a not-found page from the same entry module.</p>
</li>
<li><p><strong>Your UI ships with the extension bundle:</strong> App Home UI extensions live alongside your other app extensions. Shopify CLI creates an <code>extensions/app-home/</code> folder that contains the extension configuration and source files. This means your app's primary UI can share the same extension-based workflow as the rest of the app. You can preview it with <code>shopify app dev</code> and deploy it with <code>shopify app deploy</code> as part of an app version.</p>
</li>
<li><p><strong>Shopify hosts the App Home surface:</strong> Because Shopify hosts the extension, you don't need a separate hosting step for the App Home page. This is useful when your app's main workspace is a lightweight dashboard, configuration page, resource manager, or guided workflow that can run entirely in the extension runtime.</p>
</li>
<li><p><strong>The runtime has constraints:</strong> App Home UI extensions are intentionally more constrained than the iframe model. Use this model only when those constraints fit your app:</p>
</li>
</ol>
<ul>
<li><p>App Home UI extensions are for custom-distribution apps.  </p>
</li>
<li><p>The runtime uses Preact.  </p>
</li>
<li><p>UI is built with Polaris web components.  </p>
</li>
<li><p>Browser APIs are limited compared to a developer-hosted web app.  </p>
</li>
<li><p>The compressed bundle size limit is <code>64 KB</code>.  </p>
</li>
<li><p>If you outgrow the runtime, you reauthor the App Home experience as an iframe app.  </p>
<p>If your app needs public distribution, server-side logic, webhooks, unrestricted browser APIs, or the full flexibility of a web framework, continue using the iframe model.</p>
</li>
</ul>
<h2>Get started</h2>
<p>You can scaffold a new extension-only app with an App Home UI extension using Shopify CLI:</p>
<ol>
<li>Run <code>shopify app init</code>.  </li>
<li>Select <strong>Build an extension-only app</strong> when prompted.  </li>
<li>Open <code>extensions/app-home/shopify.extension.toml</code> and confirm that the extension targets <code>admin.app.home.render</code>.  </li>
<li>Run <code>shopify app dev</code> and select your development store.  </li>
<li>Press <code>p</code> to open the preview URL and test the App Home page in Shopify admin.  </li>
<li>Deploy the extension as part of an app version with <code>shopify app deploy</code>.</li>
</ol>
<p>You can also add an App Home UI extension to an existing app by running <code>shopify app generate extension</code> and selecting <strong>App home</strong> when prompted.</p>
<h2>Related docs</h2>
<ul>
<li><a href="https://shopify.dev/docs/apps/build/app-home" target="_blank" class="body-link">Apps in App Home</a>  </li>
<li><a href="https://shopify.dev/docs/apps/build/app-home/app-home-ui-extensions" target="_blank" class="body-link">App Home UI extensions</a>  </li>
<li><a href="https://shopify.dev/docs/api/app-home-ui-extension/latest" target="_blank" class="body-link">App Home UI extension reference</a>  </li>
<li><a href="https://shopify.dev/docs/apps/build/app-extensions/configure-app-extensions#app-home-ui-extensions" target="_blank" class="body-link">Configure app extensions</a>  </li>
<li><a href="https://shopify.dev/docs/apps/build/app-extensions/build-extension-only-app" target="_blank" class="body-link">Build an extension-only app</a></li>
</ul>
</div> ]]></description>
    <pubDate>Mon, 01 Jun 2026 17:30:00 +0000</pubDate>
    <atom:published>2026-06-01T17:30:00.000Z</atom:published>
    <atom:updated>2026-07-17T13:52:18.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <category>Admin Extensions</category>
    <category>2026-07</category>
    <link>https://shopify.dev/changelog/build-app-home-as-a-ui-extension</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/build-app-home-as-a-ui-extension</guid>
  </item>
  <item>
    <title>Customize /llms.txt, /llms-full.txt and /agents.md</title>
    <description><![CDATA[ <div class=""><p>Your store includes a default <code>agents.md</code> file accessible at <code>/agents.md</code>. The paths <code>/llms.txt</code> and <code>/llms-full.txt</code> also point to this content by default.</p>
<p>Add any of the following templates under Online Store &gt; Themes &gt; Edit code to serve different content per path:</p>
<ul>
<li><code>templates/agents.md.liquid</code> — controls /agents.md (and the default for the other two paths)</li>
<li><code>templates/llms.txt.liquid</code> — controls /llms.txt only</li>
<li><code>templates/llms-full.txt.liquid</code> — controls /llms-full.txt only</li>
</ul>
<p>If no template is present for a given path, it falls back to your agents.md template, then to the Shopify-generated default. See the <a href="https://shopify.dev/docs/storefronts/themes/architecture/templates/agents-md-liquid" target="_blank" class="body-link">updated documentation</a> for more details. </p>
</div> ]]></description>
    <pubDate>Thu, 28 May 2026 20:00:00 +0000</pubDate>
    <atom:published>2026-05-28T20:00:00.000Z</atom:published>
    <atom:updated>2026-06-04T19:18:22.000Z</atom:updated>
    <category>Themes</category>
    <category>New</category>
    <link>https://shopify.dev/changelog/customize-llmstxt-llms-fulltxt-and-agentsmd</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/customize-llmstxt-llms-fulltxt-and-agentsmd</guid>
  </item>
  <item>
    <title>Next Generation Events now available in developer preview</title>
    <description><![CDATA[ <div class=""><p>Next Generation Events are now available in developer preview. Events give you field-level control over when a subscription fires, what data it carries, and what triggers each delivery, fixing three common friction points faced with traditional webhooks: over-delivery, fixed payloads, and no built-in signal for what changed.</p>
<div style="display: flex; justify-content: center;">
<iframe width="560" height="315" src="https://www.youtube.com/embed/HmBjTMJ3GrA?si=ohq7Nq1VWboyURtB" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>
</div>

<p>Events are available today on the <code>unstable</code> API version for the Product and Customer topics, with more rolling out through 2026.</p>
<h2>Classic webhooks on Shopify</h2>
<p>Apps often need to react when merchant data changes in Shopify:</p>
<ul>
<li>A product information management app syncing product data to an external catalog.  </li>
<li>A loyalty app updating a customer profile when customer data changes.  </li>
<li>A fulfillment app reacting when an order changes.</li>
</ul>
<p>Classic webhooks have solved this by giving apps a way to subscribe to a topic and receive a payload when that resource changes. For example, if your app wants to know when products change, you can subscribe to <code>products/update</code> topic:</p>
<pre><code class="language-toml">[webhooks]
api_version = &quot;2026-07&quot;

[[webhooks.subscriptions]]
topics = [&quot;products/update&quot;]
uri = &quot;/webhooks/products/update&quot;
</code></pre>
<p>When a product updates, Shopify sends a delivery to your app. Your app gets a signal that something changed, but the signal is broader than the workflow your app is trying to run. Your handler still needs to read the payload and decide whether the delivery matters. For example, an app syncing prices to an external catalog is only interested when the prices of items change. Since the <code>products/update</code> webhook fires on all product changes, including title, tags, status, and options, the app still needs to determine whether a delivery needs to be acted on or thrown away.</p>
<p>You can use <code>include_fields</code> to reduce the webhook payload to a point, but Shopify still sends a delivery for every qualifying <code>products/update</code>:</p>
<pre><code class="language-toml">[[webhooks.subscriptions]]
topics = [&quot;products/update&quot;]
uri = &quot;/webhooks/products/update&quot;
include_fields = [&quot;id&quot;, &quot;status&quot;, &quot;variants.id&quot;, &quot;variants.price&quot;, &quot;updated_at&quot;]
</code></pre>
<p>You can also use <code>filter</code> to suppress deliveries based on the current values from a predetermined payload doesn't describe which field changed, and it doesn't prevent unrelated product updates from being delivered if the current payload still matches the filter:</p>
<pre><code class="language-toml">[[webhooks.subscriptions]]
topics = [&quot;products/update&quot;]
uri = &quot;/webhooks/products/update&quot;
include_fields = [&quot;id&quot;, &quot;status&quot;, &quot;variants.id&quot;, &quot;variants.price&quot;, &quot;updated_at&quot;]
filter = &quot;status:active AND variants.price:&gt;=10.00&quot;
</code></pre>
<p>In this example, Shopify sends the webhook for any product update where the product is active and at least one variant currently has a price of <code>10.00</code> or more. A title edit, tag update, or option change can still pass the filter if the product already matches those conditions. If your app only wants price changes, then the handler still has work to do:</p>
<ol>
<li>Receive <code>products/update</code> deliveries that pass any configured <code>filter</code>.  </li>
<li>Compare the current payload against previous state stored by your app.  </li>
<li>Discard deliveries where the product still matches the filter but the price didn't change.  </li>
<li>Make a follow-up GraphQL Admin API request if the webhook payload doesn't include all the data needed to respond.  </li>
<li>Run the sync after the app has proved that the delivery is relevant.</li>
</ol>
<p>For workflows that care about a specific field changing, detection, state comparison, and follow-up fetching are pushed into the app.</p>
<h2>Introducing Events</h2>
<p>Events keep the parts of Classic webhooks that make them useful and introduces new configuration to define what is relevant to your app.</p>
<img src="https://cdn.shopify.com/shopifycloud/shopify-dev/production/assets/assets/images/apps/webhooks-events/events-webhooks-DFFC02fh.png" alt="Events and webhooks image" style="max-height: 550px; width: auto; display: block; margin: 0 auto; margin-bottom: 20px;">

<p>Instead of subscribing to a classic webhook topic and figuring out whether a delivery matters afterwards, you define the topic, action, field-level triggers, payload shape, and delivery conditions in <code>shopify.app.toml</code>. Topics map to GraphQL Admin API objects, so a topic covers the entity you want to subscribe to and its owned data. Actions are standardized to <code>create</code>, <code>update</code>, and <code>delete</code>, and they describe the lifecycle event on the root entity. For example, adding a variant to a product is an <code>update</code> action on the Product topic; the action tells you the product changed, while triggers and <code>fields_changed</code> tell you what changed inside it.</p>
<p>For the same price sync workflow, consider the following Events subscription:</p>
<pre><code class="language-toml">[events]
api_version = &quot;unstable&quot;

[[events.subscription]]
handle = &quot;price_sync&quot;
topic = &quot;Product&quot;
actions = [&quot;update&quot;]
triggers = [&quot;product.variants.price&quot;, &quot;product.variants.compareAtPrice&quot;]
uri = &quot;/api/events&quot;

query = &quot;&quot;&quot;
  query priceSync($productId: ID!, $variantsId: ID!) {
    productVariant(id: $variantsId) {
      id
      price
      compareAtPrice
      sku
    }
    product(id: $productId) {
      id
      title
      status
    }
  }
&quot;&quot;&quot;

query_filter = &quot;product.status:'ACTIVE'&quot;
</code></pre>
<p>This subscription moves the relevance check into Shopify in three places.</p>
<ol>
<li>First, <code>triggers</code> pre-qualify which field changes can fire the <code>update</code> delivery. In this case, a delivery qualifies only when <code>product.variants.price</code> or <code>product.variants.compareAtPrice</code> changes. A product title edit, tag update, or option change doesn't qualify for this subscription. Triggers are optional; omitting them means every trigger that can fire an Event, will fire an Event  </li>
<li>Second, you can design the payload you receive with <code>query</code> , which is a standard GraphQL Admin API query. Shopify runs the query after the qualifying change and includes the result in the delivery's <code>data</code> field. In this case, your handler receives the changed variant's price, compare-at price, and SKU, plus the product's title and status, without treating the delivery as a signal to make a second request. There's no fixed payload schema to work around; the response is shaped for the use case you configured. If you don't need data in the delivery, the query is optional and Shopify sends a thinner payload with <code>fields_changed</code> and <code>query_variables</code>.  </li>
<li>Third, <code>query_filter</code> suppresses deliveries that don't match the current query result. In this example, <code>product.status:'ACTIVE'</code> means Shopify sends the delivery only when the product's current status is active. Any field you use in <code>query_filter</code> must also exist in your query. Together, <code>triggers</code> and <code>query_filter</code> help the right deliveries reach your app before your endpoint is called.</li>
</ol>
<p>When those conditions are met, your app receives a delivery like this:</p>
<pre><code class="language-json">{
  &quot;topic&quot;: &quot;Product&quot;,
  &quot;action&quot;: &quot;update&quot;,
  &quot;handle&quot;: &quot;price_sync&quot;,
  &quot;data&quot;: {
    &quot;productVariant&quot;: {
      &quot;id&quot;: &quot;gid://shopify/ProductVariant/456&quot;,
      &quot;price&quot;: &quot;24.99&quot;,
      &quot;compareAtPrice&quot;: &quot;34.99&quot;,
      &quot;sku&quot;: &quot;SIGNAL-NOT-NOISE&quot;
    },
    &quot;product&quot;: {
      &quot;id&quot;: &quot;gid://shopify/Product/123&quot;,
      &quot;title&quot;: &quot;Peace &amp; Quiet Tee&quot;,
      &quot;status&quot;: &quot;ACTIVE&quot;
    }
  },
  &quot;fields_changed&quot;: [
    &quot;product[id: 'gid://shopify/Product/123'].variants[id: 'gid://shopify/ProductVariant/456'].price&quot;
  ],
  &quot;query_variables&quot;: {
    &quot;productId&quot;: &quot;gid://shopify/Product/123&quot;,
    &quot;variantsId&quot;: &quot;gid://shopify/ProductVariant/456&quot;
  }
}
</code></pre>
<p>The delivery includes the <code>data</code> returned by your query, the <code>fields_changed</code> paths that explain why the subscription fired, and the <code>query_variables</code> Shopify used to run the GraphQL Admin API query. Your app no longer needs to infer whether price changed by comparing the payload against stored state, discard unrelated product updates that happened to pass a current-state filter, or make a second request just to collect the data needed for the price sync.</p>
<h2>Get started</h2>
<p>Events is in developer preview and uses the <code>unstable</code> API version. To try Events:</p>
<ol>
<li>Upgrade to Shopify CLI version 3.92 or higher.  </li>
<li>Add an <code>[events]</code> block to <code>shopify.app.toml</code>.  </li>
<li>Create a subscription for a supported topic from the Events reference.  </li>
<li>Add <code>triggers</code> for the field changes that matter to your workflow.  </li>
<li>Add a GraphQL <code>query</code> and, if needed, a <code>query_filter</code>.  </li>
<li>Deploy the app configuration and test deliveries in a development store.</li>
</ol>
<p>Start with the <a href="https://shopify.dev/docs/apps/build/events/get-started" target="_blank" class="body-link">Create an Events subscription</a> tutorial for a working product sync example, or move right into <a href="https://shopify.dev/docs/apps/build/events/migrate-from-webhooks" target="_blank" class="body-link">migrating your existing subscriptions into Events</a>.</p>
<h2>What's next</h2>
<p>Events are available in developer preview while topic coverage expands. For topics that aren't supported yet, keep using webhooks alongside Events in the same <code>shopify.app.toml</code>.</p>
<p>As you test, look for workflows where your app currently receives broad webhook deliveries, compares them against stored state, filters them in your handler, and then calls the GraphQL Admin API to fetch more data. Those workflows are strong candidates for Events subscriptions.</p>
<p>If you want more background on the developer preview, follow the <a href="https://x.com/kinngh/status/2056737006764359715" target="_blank" class="body-link">launch thread</a>, watch the <a href="https://x.com/i/broadcasts/1jxXgeWVOYPJZ" target="_blank" class="body-link">Events walkthrough</a>, or join the <a href="https://community.shopify.dev/t/next-generation-events-now-available-in-developer-preview/34467" target="_blank" class="body-link">Developer Community discussion</a>.</p>
<h2>Related docs</h2>
<ul>
<li><a href="https://shopify.dev/docs/api/events/latest" target="_blank" class="body-link">Events reference</a>  </li>
<li><a href="https://shopify.dev/docs/apps/build/events" target="_blank" class="body-link">About Events</a>  </li>
<li><a href="https://shopify.dev/docs/apps/build/events/get-started" target="_blank" class="body-link">Create an Events subscription</a>  </li>
<li><a href="https://shopify.dev/docs/apps/build/events/migrate-from-webhooks" target="_blank" class="body-link">Migrate from webhooks</a></li>
</ul>
</div> ]]></description>
    <pubDate>Wed, 27 May 2026 14:00:00 +0000</pubDate>
    <atom:published>2026-05-27T14:00:00.000Z</atom:published>
    <atom:updated>2026-07-17T14:35:38.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <category>Events &amp; webhooks</category>
    <link>https://shopify.dev/changelog/next-generation-events-now-available-in-developer-preview</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/next-generation-events-now-available-in-developer-preview</guid>
  </item>
  <item>
    <title>Shopify CLI 4.0: SemVer, auto-updates, removing deprecated flags and commands</title>
    <description><![CDATA[ <div class=""><p>The release of Shopify CLI 4.0 today brings clarity to CLI versioning, the introduction of automatic updates, and the <a href="https://shopify.dev/changelog/the-shopify-cli-app-release-force-flag-is-deprecated-and-will-be-removed" target="_blank" class="body-link">announced removal</a> of the deprecated <code>--force</code> flag from <code>shopify app deploy</code>.</p>
<h2>Semantic Versioning</h2>
<p>Shopify CLI is now following semantic versioning practices. Releases with new features will be minor versions, and bug fixes will be patch versions. When required, major version releases will be used to communicate breaking changes to CLI command structure or behavior.</p>
<p>For more information, see <a href="https://community.shopify.dev/t/from-romantic-to-semantic-shopify-cli-versioning-and-auto-updates/33069" target="_blank" class="body-link">our announcement of the move to SemVer</a>.</p>
<h2>Automatic Upgrades</h2>
<p>Starting with Shopify CLI 4.0, Shopify CLI upgrades itself automatically using the package manager you installed it with. Auto-upgrade is skipped in CI, project-local installs, and for major version releases. Automatic upgrades can be disabled with the <code>shopify config autoupgrade off</code> command.</p>
<p>For more information, see <a href="https://shopify.dev/docs/api/shopify-cli#upgrade-shopify-cli" target="_blank" class="body-link">Shopify CLI documentation</a>.</p>
<h2>Removal of the <code>--force</code> flag for app releases</h2>
<p>The <code>--force</code> flag on the <code>app deploy</code> and <code>app release</code> commands didn’t distinguish between low-risk operations (adding or updating extensions) and high-risk ones (deleting them). This flag has been removed in Shopify CLI 4.0. The previously released <code>--allow-updates</code> and <code>--allow-deletes</code> flags give you granular control, so your CI/CD pipelines can run unattended without the risk of accidental, irreversible deletions.</p>
<p>For more information, see <a href="https://shopify.dev/changelog/the-shopify-cli-app-release-force-flag-is-deprecated-and-will-be-removed" target="_blank" class="body-link">the March 2026 changelog</a>.</p>
<h2>Other removed commands and flags</h2>
<p>The following deprecated commands and flags have also been removed in Shopify CLI 4.0:</p>
<ul>
<li><code>shopify webhook trigger</code> (use <code>shopify app webhook trigger</code>)  </li>
<li><code>shopify theme serve</code> (use <code>shopify theme dev</code>)  </li>
<li><code>shopify app generate schema</code> (use <code>shopify app function schema</code>)  </li>
<li><code>shopify app webhook trigger --shared-secret</code> (use <code>--client-secret</code>)  </li>
<li><code>shopify app generate extension --type</code> (use <code>--template</code>)</li>
</ul>
</div> ]]></description>
    <pubDate>Thu, 21 May 2026 21:00:00 +0000</pubDate>
    <atom:published>2026-05-21T21:00:00.000Z</atom:published>
    <atom:updated>2026-05-21T21:00:00.000Z</atom:updated>
    <category>Tools</category>
    <category>Update</category>
    <link>https://shopify.dev/changelog/shopify-cli-40-semver-auto-updates-removing-deprecated-flags-and-commands</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/shopify-cli-40-semver-auto-updates-removing-deprecated-flags-and-commands</guid>
  </item>
  <item>
    <title>Feature preview: Customer account improvements</title>
    <description><![CDATA[ <div class=""><p>Customer accounts are getting a visual refresh, featuring improved navigation, layout, and consistency across devices. You can preview these changes now and test your Shopify Extensions within the updated layout.</p>
<p><strong>What's changing:</strong></p>
<ul>
<li><strong>Single-column native pages</strong>: These are now consistent across both desktop and mobile, with simplified navigation. Inline extensions will render in a narrower page width compared to the previous wider layout. Full-page extensions can either adopt our mobile-first, narrow layout that matches native pages or expand to a wider layout for data-heavy content.</li>
<li><strong>Increased visibility for order action extensions</strong>: Order action extensions are now more visible, and order summary extensions are no longer hidden behind a tap on mobile devices. This change makes it easier for customers to discover and use the features you've built.</li>
<li><strong>Existing extension targets are mapped to the new layout</strong>: Ensuring compatibility with the new design. See <a href="https://shopify.dev/docs/apps/build/customer-accounts/feature-preview-customer-account-improvements#extension-targets-by-page" target="_blank" class="body-link">extension targets by page</a>.</li>
</ul>
<p>All current extension targets remain supported. However, this is an ideal time to review them. Testing now gives you a head start on any adjustments needed to ensure your extensions integrate seamlessly before these design updates are released to merchants. The feature preview will be available until June 12, 2026.</p>
<p>Read our <a href="https://shopify.dev/docs/apps/build/customer-accounts/feature-preview-customer-account-improvements" target="_blank" class="body-link">documentation</a> to start the preview. You can ask questions and share feedback in the <a href="https://community.shopify.dev/t/feature-preview-customer-account-design-improvements/34162" target="_blank" class="body-link">Shopify community</a>.</p>
</div> ]]></description>
    <pubDate>Wed, 20 May 2026 21:00:00 +0000</pubDate>
    <atom:published>2026-05-20T21:00:00.000Z</atom:published>
    <atom:updated>2026-05-21T00:27:32.000Z</atom:updated>
    <category>Platform</category>
    <category>Update</category>
    <link>https://shopify.dev/changelog/feature-preview-customer-account-improvements</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/feature-preview-customer-account-improvements</guid>
  </item>
  <item>
    <title>Shop Minis March April 2026 update</title>
    <description><![CDATA[ <div class=""><h2>New Features</h2>
<h3>Optional Consent</h3>
<p>Users can now reject scopes and continue using your Mini. Consent is no longer all-or-nothing — if a user declines a scope, your Mini should gracefully degrade rather than block the experience. If your Mini hard-fails when a scope is rejected, please update it using the new hooks below.</p>
<h3>useCheckScopesConsent Hook</h3>
<p>Check at runtime which scopes a user has granted. Use this to conditionally render features that depend on a particular scope.</p>
<p><strong>Usage:</strong></p>
<pre><code>import {useCheckScopesConsent} from '@shopify/shop-minis-react'

function MyMini() {
  const {scopes} = useCheckScopesConsent()

  if (scopes.includes('product_lists:write')) {
    return &lt;SaveToListButton /&gt;
  }
  return &lt;SignInPrompt /&gt;
}
</code></pre>
<h3>useRequestScopesConsent Hook</h3>
<p>Re-request consent after a user has previously declined. The hook must be invoked from a user interaction — you cannot re-prompt automatically. Use this for flows where granting consent unlocks a clear, user-initiated action.</p>
<p><strong>Usage:</strong></p>
<pre><code>import {useRequestScopesConsent} from '@shopify/shop-minis-react'

function GrantAccessButton() {
  const {requestScopesConsent} = useRequestScopesConsent()

  return (
    &lt;button onClick={() =&gt; requestScopesConsent(['product_lists:write'])}&gt;
      Enable saving products
    &lt;/button&gt;
  )
}
</code></pre>
<h3>useCheckPermissions Hook</h3>
<p>Separate from scopes, <code>useCheckPermissions</code> lets your Mini check OS-level permissions (camera, photo library, and so on) before invoking an action that requires them.</p>
<p><strong>Usage:</strong></p>
<pre><code>import {useCheckPermissions} from '@shopify/shop-minis-react'

function CameraFeature() {
  const {permissions} = useCheckPermissions(['camera'])

  if (permissions.camera === 'granted') {
    return &lt;CameraView /&gt;
  }
  return &lt;RequestCameraButton /&gt;
}
</code></pre>
<h3>request_blocked Sentinel</h3>
<p>When a user has declined a scope or permission and the platform will not re-prompt, the relevant hooks now return a <code>request_blocked</code> sentinel value instead of <code>null</code>. This lets you distinguish &quot;not asked yet&quot; from &quot;asked and blocked&quot; and tailor your UI accordingly. See the Scopes Consent docs on shopify.dev for the full state machine.</p>
<h3>Intents</h3>
<p>Intents are a new communication layer between the Shop app and Shop Minis. The Shop app launches your Mini from contextually relevant moments — such as a product detail page — and passes along the context (typically a product). For partners, this opens a new path to distribution: instead of relying on the Explore tab alone, your Mini can be surfaced where buyer intent is highest.</p>
<p>Two intents are supported today:</p>
<p>| Intent | What it's for |
| :</p>
</div> ]]></description>
    <pubDate>Wed, 20 May 2026 16:00:00 +0000</pubDate>
    <atom:published>2026-05-20T16:00:00.000Z</atom:published>
    <atom:updated>2026-05-20T16:00:00.000Z</atom:updated>
    <category>API</category>
    <category>Update</category>
    <category>Shop Minis</category>
    <link>https://shopify.dev/changelog/shop-minis-march-april-2026-update</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/shop-minis-march-april-2026-update</guid>
  </item>
  <item>
    <title>Expiring offline access tokens required for all public apps as of January 1, 2027</title>
    <description><![CDATA[ <div class=""><p>We're changing how public apps handle offline access tokens to enhance merchant data protection. Starting January 1, 2027, all public apps must use <a href="https://shopify.dev/docs/apps/build/authentication-authorization/access-tokens/offline-access-tokens#expiring-vs-non-expiring-offline-tokens" target="_blank" class="body-link">expiring offline access tokens</a> when calling the Admin API. After that date, public apps still using non-expiring tokens will receive authentication errors.</p>
<p>This extends the <a href="https://shopify.dev/changelog/expiring-offline-access-tokens-required-for-public-apps-april-1-2026" target="_blank" class="body-link">April 1, 2026 change</a>, which applied only to newly created public apps, to all public apps, including those created before April 1, 2026.</p>
<h2>What apps are affected</h2>
<p><a href="https://shopify.dev/docs/apps/launch/distribution#capabilities-and-requirements" target="_blank" class="body-link">Public apps</a> making Admin API requests using non-expiring offline access tokens, including apps created before April 1, 2026</p>
<h2>What apps are unaffected</h2>
<ul>
<li>Custom apps</li>
<li>Apps created by merchants either in the Dev Dashboard or in the admin</li>
</ul>
<h2>Why we're making this change</h2>
<p>Non-expiring tokens, if leaked, remain valid indefinitely. Expiring tokens close that window in 60 minutes and rotate automatically, dramatically reducing the impact of a credential leak. This aligns with modern OAuth best practices, and as a developer it gives your app a predictable refresh flow.</p>
<h2>Action required</h2>
<p><strong>Existing public apps</strong>: Migrate from non-expiring to expiring offline access tokens. </p>
<p>Merchants don't need to reinstall, as your app exchanges existing tokens through code. Follow the <a href="https://shopify.dev/docs/apps/build/authentication-authorization/access-tokens/offline-access-tokens#migrating-from-non-expiring-to-expiring-tokens" target="_blank" class="body-link">migration guide</a> for the step-by-step path. If you use Shopify's app templates and official API libraries, refresh handling is already implemented; you only need to handle the token exchange and storage updates.</p>
<p>Need help? Engage with the <a href="https://community.shopify.dev/c/dev-platform/32" target="_blank" class="body-link">dev platform community</a> for support and questions.</p>
</div> ]]></description>
    <pubDate>Wed, 20 May 2026 16:00:00 +0000</pubDate>
    <atom:published>2026-05-20T16:00:00.000Z</atom:published>
    <atom:updated>2026-05-20T16:00:00.000Z</atom:updated>
    <category>Action Required</category>
    <category>API</category>
    <category>Breaking API Change</category>
    <category>Admin GraphQL API</category>
    <category>Admin REST API</category>
    <link>https://shopify.dev/changelog/expiring-offline-access-tokens-required-for-all-public-apps-as-of-january-1-2027</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/expiring-offline-access-tokens-required-for-all-public-apps-as-of-january-1-2027</guid>
  </item>
  <item>
    <title>`shippingLine` field added to `FulfillmentOrderLineItem`</title>
    <description><![CDATA[ <div class=""></div> ]]></description>
    <pubDate>Mon, 18 May 2026 23:00:00 +0000</pubDate>
    <atom:published>2026-05-18T23:00:00.000Z</atom:published>
    <atom:updated>2026-07-10T19:22:01.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <category>Admin GraphQL API</category>
    <category>2026-07</category>
    <link>https://shopify.dev/changelog/shipping-line-field-now-available-on-fulfillmentorderlineitem</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/shipping-line-field-now-available-on-fulfillmentorderlineitem</guid>
  </item>
  <item>
    <title> New `checkoutToken` field added to the `Order` object</title>
    <description><![CDATA[ <div class=""><p>The <a href="https://shopify.dev/docs/api/admin-graphql/2026-07/objects/Order#field-Order.fields.checkoutToken" target="_blank" class="body-link"><code>checkoutToken</code></a> field is now available on the GraphQL Admin API's <a href="https://shopify.dev/docs/api/admin-graphql/2026-07/objects/Order" target="_blank" class="body-link"><code>Order</code></a> object. This field returns the token associated with the checkout that was used to create the order, matching the existing <code>checkout_token</code> field in the REST Admin API.</p>
</div> ]]></description>
    <pubDate>Fri, 15 May 2026 16:00:00 +0000</pubDate>
    <atom:published>2026-05-15T16:00:00.000Z</atom:published>
    <atom:updated>2026-06-25T17:00:41.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <category>Admin GraphQL API</category>
    <category>2026-07</category>
    <link>https://shopify.dev/changelog/new-checkouttoken-field-added-to-the-order-object</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/new-checkouttoken-field-added-to-the-order-object</guid>
  </item>
  <item>
    <title>Function run log details are now automatically visible with the right access scopes</title>
    <description><![CDATA[ <div class=""><p>You no longer need to ask merchants to share function run logs with you. These logs are now automatically available in the Dev Dashboard for any function your app has the necessary access scopes to view.</p>
<h2>What's Changed</h2>
<p>Function run logs in the Dev Dashboard are now accessible based on the access scopes granted to your app by the merchant. The required scopes to view a log are determined by the function's input query. If your app has the necessary scopes to read these fields via the GraphQL Admin API, you will automatically see the run details without needing any additional action from the merchant.</p>
<h2>What You Need to Do</h2>
<p>If you expect to see function run details but don't, ensure your app has the scopes required by the input query. Here's how you can check:</p>
<ol>
<li><p><strong>Request the scopes during your app's installation/authentication process:</strong> This is ideal for scopes your app consistently needs. Refer to <a href="https://shopify.dev/docs/api/usage/access-scopes" target="_blank" class="body-link">Access scopes</a> for instructions on declaring and requesting access scopes.</p>
</li>
<li><p><strong>Request protected customer data scopes when accessing customer data:</strong> Some fields, like customer details and addresses, require additional protected customer data access. Consult <a href="https://shopify.dev/docs/apps/launch/protected-customer-data" target="_blank" class="body-link">Protected customer data</a> for the approval process and necessary data-level scopes.</p>
</li>
<li><p><strong>Use optional scopes for temporary or debugging access:</strong> If a scope is needed occasionally, such as for debugging, request it as an <a href="https://shopify.dev/docs/apps/build/authentication-authorization/app-installation/manage-access-scopes#request-new-access-scopes-dynamically" target="_blank" class="body-link">optional scope</a>. Merchants can grant or revoke it without reinstalling the app.</p>
</li>
</ol>
<p>Once the required scopes are granted, the run details will automatically be visible the next time you access the log.</p>
</div> ]]></description>
    <pubDate>Wed, 13 May 2026 20:00:00 +0000</pubDate>
    <atom:published>2026-05-13T20:00:00.000Z</atom:published>
    <atom:updated>2026-05-13T20:00:00.000Z</atom:updated>
    <category>Platform</category>
    <category>Update</category>
    <link>https://shopify.dev/changelog/function-run-log-details-are-now-automatically-visible-with-the-right-access-scopes</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/function-run-log-details-are-now-automatically-visible-with-the-right-access-scopes</guid>
  </item>
  <item>
    <title>Checkout And Accounts Configuration API for unified branding across checkout, customer accounts, and sign-in</title>
    <description><![CDATA[ <div class=""><p>As of API version 2026-04, the new Checkout And Accounts Configuration API is now available to unlock consistent branding customizations across checkout, customer accounts, and sign-in surfaces. This API is exclusively available to Shopify Plus merchants. </p>
<p>This new API replaces the <a href="https://shopify.dev/docs/api/admin-graphql/latest/queries/CheckoutProfile" target="_blank" class="body-link">Checkout Profile API</a> and <a href="https://shopify.dev/docs/api/admin-graphql/latest/mutations/CheckoutBrandingUpsert" target="_blank" class="body-link">Checkout Branding API</a> (both are now deprecated). All capabilities to customize settings and branding for checkout, and customer accounts, and sign-in are now consolidated into one single API.</p>
<p>What you can do: </p>
<ul>
<li><p><strong>Shared branding settings:</strong> Use shared designTokens and components to set branding once and apply consistently across checkout, customer accounts, and sign-in pages. Section styles (padding, shadows, colors, borders, and border radius) previously available for checkout only can now be applied to customer account pages. </p>
</li>
<li><p><strong>Surface-specific overrides:</strong> Apply targeted overrides under surfaces.checkout, surfaces.customerAccounts, and surfaces.signIn for logos, colors, and section styles.</p>
</li>
<li><p><strong>Direct color settings</strong>: Set color using HEX values or palette colors directly on sections like main, header, and orderSummary — no more mapping through a limited number of color schemes. Save your brand colors to an editable color palette of up to 20 colors and reference anywhere you make a color selection. Update a palette color, and it changes everywhere it is referenced.</p>
</li>
<li><p><strong>Customize branding per market</strong>: Customize your pages for each market with unique branding settings.</p>
</li>
</ul>
<p>View <a href="https://shopify.dev/docs/api/admin-graphql/latest/mutations/checkoutAndAccountsConfigurationUpdate" target="_blank" class="body-link">developer documentation</a> for more detail.</p>
</div> ]]></description>
    <pubDate>Wed, 13 May 2026 15:00:00 +0000</pubDate>
    <atom:published>2026-05-13T15:00:00.000Z</atom:published>
    <atom:updated>2026-05-13T15:00:00.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <category>Admin GraphQL API</category>
    <category>2026-04</category>
    <link>https://shopify.dev/changelog/checkout-and-accounts-configuration-api-for-unified-branding-across-checkout-customer-accounts-and-sign-in</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/checkout-and-accounts-configuration-api-for-unified-branding-across-checkout-customer-accounts-and-sign-in</guid>
  </item>
  <item>
    <title>Polaris web components migration guides now available for Checkout and Customer Account UI extensions</title>
    <description><![CDATA[ <div class=""><p>We’ve published new migration guides to help you upgrade Checkout and Customer Account UI extensions to the latest API version and Polaris web components.</p>
<p>The new guides include:</p>
<ul>
<li>Guidance for moving from React or JavaScript extension APIs to Preact, Polaris web components, and the global <code>shopify</code> object.  </li>
<li>More than 60 component-specific migration pages, covering components such as <code>Button</code>, <code>Checkbox</code>, <code>TextField</code>, <code>Banner</code> and <code>View</code> for <a href="https://shopify.dev/docs/apps/build/checkout/migrate-to-web-components#mapping-legacy-components-to-web-components" target="_blank" class="body-link">Checkout</a> and <a href="https://shopify.dev/docs/apps/build/customer-accounts/migrate-to-web-components#mapping-legacy-components-to-web-components" target="_blank" class="body-link">Customer Account</a> UI extensions.  </li>
<li>Instructions for migrating checkout metafields to cart metafields</li>
</ul>
<p>If your extension uses an API version earlier than <code>2025-10</code>, use these guides to adopt Polaris web components, which are the default in API version <code>2025-10</code> and later.</p>
<p>Start with:</p>
<ul>
<li><a href="https://shopify.dev/docs/apps/build/checkout/migrate-to-web-components" target="_blank" class="body-link">Checkout UI extensions migration guide</a>  </li>
<li><a href="https://shopify.dev/docs/apps/build/customer-accounts/migrate-to-web-components" target="_blank" class="body-link">Customer Account UI extensions migration guide</a></li>
</ul>
</div> ]]></description>
    <pubDate>Wed, 13 May 2026 13:30:00 +0000</pubDate>
    <atom:published>2026-05-13T13:30:00.000Z</atom:published>
    <atom:updated>2026-05-13T13:30:00.000Z</atom:updated>
    <category>API</category>
    <category>Update</category>
    <category>Checkout UI</category>
    <category>Customer Accounts</category>
    <link>https://shopify.dev/changelog/polaris-web-components-migration-guides-now-available-for-checkout-and-customer-account-ui-extensions</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/polaris-web-components-migration-guides-now-available-for-checkout-and-customer-account-ui-extensions</guid>
  </item>
  <item>
    <title>Shopify App Pricing: charge for usage, recurring subscriptions, or both</title>
    <description><![CDATA[ <div class=""><p><a href="https://shopify.dev/docs/apps/launch/billing/shopify-app-pricing" target="_blank" class="body-link">Shopify App Pricing</a> supports subscriptions, usage-based charges, or combined models, configured in the Partner Dashboard.</p>
<p><strong>What's new:</strong></p>
<p><strong>Managed Pricing is now Shopify App Pricing</strong>
Shopify App Pricing replaces Managed Pricing as Shopify’s default billing solution that gets configured during app submission in the Partner Dashboard. Apps previously on Managed Pricing will now see “Shopify App Pricing” as their selected billing solution. </p>
<p><strong>Usage-based billing now possible with App Events API</strong>
Charge based on merchant usage using the App Events API. Send events from your app, define meters in the Partner Dashboard, and Shopify handles aggregation, calculation, and invoicing. Three pricing structures supported: fixed, graduated, and volume. Supports negative reporting for automatic charge corrections.</p>
<p><strong>New APIs make billing data more accurate</strong>
<a href="https://shopify.dev/docs/apps/launch/billing/shopify-app-pricing#query-subscription-data" target="_blank" class="body-link">Active Subscription API</a>: Real-time subscription status (active, pending, cancelled, frozen) that persists beyond uninstall
[Historical API:](<a href="https://shopify.dev/docs/apps/launch/billing/shopify-app-pricing#app" target="_blank" class="body-link">https://shopify.dev/docs/apps/launch/billing/shopify-app-pricing#app</a></p>
</div> ]]></description>
    <pubDate>Tue, 12 May 2026 22:30:00 +0000</pubDate>
    <atom:published>2026-05-12T22:30:00.000Z</atom:published>
    <atom:updated>2026-05-13T15:48:53.000Z</atom:updated>
    <category>App store</category>
    <category>New</category>
    <link>https://shopify.dev/changelog/shopify-app-pricing-charge-for-usage-recurring-subscriptions-or-both</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/shopify-app-pricing-charge-for-usage-recurring-subscriptions-or-both</guid>
  </item>
  <item>
    <title>App Events: See app usage and performance data in your Dev Dashboard</title>
    <description><![CDATA[ <div class=""><p>The App Events API lets you send any event from your app to Shopify. App event data appears in your Dev Dashboard Logs alongside webhooks, Function executions, and API calls.</p>
<p><strong>How it works:</strong></p>
<p><strong>1. Send app events to a single API endpoint:</strong> Define the <code>event_handle</code> and attributes you want to track and send them to the App Events API, including:</p>
<ul>
<li>Feature usage: <code>bulk_edit_completed</code>, <code>report_generated</code>, <code>automation_created</code></li>
<li>Workflows: <code>onboarding_completed</code>, <code>campaign_sent</code>, <code>export_finished</code></li>
<li>Performance: <code>sync_failed</code>, <code>api_timeout</code>, <code>rate_limit_hit</code></li>
<li>Conversion signals: <code>limit_hit</code>, <code>premium_viewed</code>, <code>milestone_achieved</code></li>
<li>Billable activities: <code>order_processed</code>, <code>email_sent</code>, <code>label_printed</code></li>
</ul>
<p><strong>2. View events in Dev Dashboard:</strong> All app events flow into Dev Dashboard Logs automatically for monitoring, alongside data Shopify provides about your app, i.e: Webhooks, Functions executions, and API calls.</p>
<p><strong>3. Optional: Turn app events into billing:</strong> On <a href="https://shopify.dev/docs/apps/launch/billing/shopify-app-pricing" target="_blank" class="body-link">Shopify App Pricing</a>, any app event can become a usage-based charge. Define a meter in the Partner Dashboard, match it to an event_handle, and Shopify handles metering and invoicing. No additional code required.</p>
<p>App Events is available now for all apps, regardless of billing method. <a href="https://shopify.dev/docs/apps/build/app-events" target="_blank" class="body-link">Learn more</a> </p>
</div> ]]></description>
    <pubDate>Tue, 12 May 2026 22:30:00 +0000</pubDate>
    <atom:published>2026-05-12T22:30:00.000Z</atom:published>
    <atom:updated>2026-05-13T15:47:45.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <link>https://shopify.dev/changelog/app-events-see-app-usage-and-performance-data-in-your-dev-dashboard</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/app-events-see-app-usage-and-performance-data-in-your-dev-dashboard</guid>
  </item>
  <item>
    <title>`PRODUCT_UNAVAILABLE_IN_BUYER_LOCATION` warning code added to `CartWarning` object</title>
    <description><![CDATA[ <div class=""></div> ]]></description>
    <pubDate>Tue, 12 May 2026 16:00:00 +0000</pubDate>
    <atom:published>2026-05-12T16:00:00.000Z</atom:published>
    <atom:updated>2026-07-10T19:24:15.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <category>Storefront API</category>
    <category>2026-07</category>
    <link>https://shopify.dev/changelog/new-productunavailableinbuyerlocation-warning-code-in-the-storefront-api-cart</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/new-productunavailableinbuyerlocation-warning-code-in-the-storefront-api-cart</guid>
  </item>
  <item>
    <title>New `cartToken` field added to the `Order` object</title>
    <description><![CDATA[ <div class=""><p>The <a href="https://shopify.dev/docs/api/admin-graphql/2026-07/objects/order#field-Order.fields.cartToken" target="_blank" class="body-link"><code>cartToken</code></a> field is now available on the GraphQL Admin API's <code>Order</code> object. This field returns the token associated with the cart that was used to create the order, matching the existing <code>cart_token</code> field in the REST Admin API.</p>
</div> ]]></description>
    <pubDate>Tue, 12 May 2026 16:00:00 +0000</pubDate>
    <atom:published>2026-05-12T16:00:00.000Z</atom:published>
    <atom:updated>2026-05-12T16:00:00.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <category>Admin GraphQL API</category>
    <category>2026-07</category>
    <link>https://shopify.dev/changelog/new-field-carttoken-added-to-the-order-graphql-admin-api</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/new-field-carttoken-added-to-the-order-graphql-admin-api</guid>
  </item>
  <item>
    <title>Target discounts to specific markets </title>
    <description><![CDATA[ <div class=""><p>We've introduced <code>markets</code> as a new option in <a href="https://shopify.dev/docs/api/admin-graphql/2026-07/input-objects/discountcontextinput#fields-markets" target="_blank" class="body-link"><code>DiscountContextInput</code></a>, enabling you to target discounts to specific regional markets, retail locations, or B2B company locations. This option can be used alongside existing eligibility options such as <code>all</code>, <code>customerSegments</code>, and <code>customers</code>.</p>
<p>You can now set market eligibility for all discount types, including:</p>
<ul>
<li>Basic, BXGY, App, and Free Shipping discounts (both automatic and code-based).</li>
<li>Note that eligibility types are mutually exclusive—you can target either markets OR customer segments, but not both simultaneously.</li>
</ul>
<p><strong>What you can do:</strong></p>
<ul>
<li>Assign market eligibility to a discount by using <code>markets</code> in <code>DiscountContextInput</code> when creating or updating a discount.</li>
<li>Query the <code>discounts</code> and <code>discountsCount</code> fields on a <code>Market</code> to view the list of discount customizations for that market.</li>
<li>Filter discounts by any market eligibility using <code>context:market</code> or by specific markets using <code>market_ids</code> in <code>discountNodes</code>.</li>
</ul>
<p><strong>What you need to know:</strong></p>
<ul>
<li>Discounts do not inherit across different market types (e.g., from regional to B2B or retail). When you assign a discount to a regional market, it automatically applies to sub-markets of the same type (e.g., from &quot;North America&quot; to &quot;Canada&quot;).</li>
<li>If you are using API versions prior to 2026-07, discounts with market eligibility will be filtered out, as these versions cannot represent them (both in node queries and specific discounts by ID).</li>
</ul>
<p>For more information, refer to the <a href="https://shopify.dev/docs/api/admin-graphql/2026-07/input-objects/discountcontextinput#fields-markets" target="_blank" class="body-link">Admin GraphQL API documentation</a>.</p>
</div> ]]></description>
    <pubDate>Fri, 08 May 2026 16:00:00 +0000</pubDate>
    <atom:published>2026-05-08T16:00:00.000Z</atom:published>
    <atom:updated>2026-05-12T13:45:31.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <category>Admin GraphQL API</category>
    <link>https://shopify.dev/changelog/target-discounts-to-specific-markets</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/target-discounts-to-specific-markets</guid>
  </item>
  <item>
    <title>Bots and agents should identify themselves via Web Bot Auth</title>
    <description><![CDATA[ <div class=""><h3>What's changing</h3>
<p>Shopify now applies stricter rate limits to bots and agents that access the Storefront API and Shopify-hosted online store pages. Bots and agents that don't sign their requests are subject to the strictest limits. To qualify for higher rate limits, operators should sign their requests with Web Bot Auth. For more details, see <a href="https://shopify.dev/docs/api/usage/limits#storefront-api-rate-limits" target="_blank" class="body-link">Storefront rate limits</a>.</p>
<h3>What you should do</h3>
<p>If you operate a bot or agent accessing Shopify storefronts, sign your requests using <a href="https://datatracker.ietf.org/doc/draft-meunier-web-bot-auth-architecture/" target="_blank" class="body-link">Web Bot Auth</a>. To get started, review the Web Bot Auth architecture and Cloudflare's <a href="https://developers.cloudflare.com/bots/concepts/bot/verified-bots/web-bot-auth/" target="_blank" class="body-link">implementation guide</a> — for context only, you do not need to enroll with Cloudflare. </p>
<h4>Higher access tiers</h4>
<p>If you require higher rate limits than those provided to Web Bot Auth traffic, please contact us <a href="https://forms.gle/V88RD31uAVirqE4e9" target="_blank" class="body-link">through this form</a>.</p>
<h4>Shopify Merchants</h4>
<p>Shopify merchants who want to <a href="https://help.shopify.com/en/manual/promoting-marketing/seo/crawling-your-store" target="_blank" class="body-link">crawl their own stores</a> can find ready-to-use Web Bot Auth signatures in the Shopify admin.</p>
</div> ]]></description>
    <pubDate>Thu, 07 May 2026 19:00:00 +0000</pubDate>
    <atom:published>2026-05-07T19:00:00.000Z</atom:published>
    <atom:updated>2026-05-07T19:00:00.000Z</atom:updated>
    <category>Action Required</category>
    <category>Platform</category>
    <category>Update</category>
    <link>https://shopify.dev/changelog/bots-and-agents-should-identify-themselves-via-web-bot-auth</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/bots-and-agents-should-identify-themselves-via-web-bot-auth</guid>
  </item>
  <item>
    <title>Publish and unpublish product variants independently from product</title>
    <description><![CDATA[ <div class=""><p><code>ProductVariant</code> is now a <code>Publishable</code>. Variants can be published or unpublished per publication (channel or catalog) in API version 2026-07, giving merchants — and your apps — fine-grained control over where each variant is visible without deleting variants, duplicating products, or hiding them via storefront code.</p>
<p>This is a non-breaking, additive change:</p>
<ul>
<li>Product-level publishing is unchanged and still takes precedence. A product must be active and published to a channel for any of its variants to render there.  </li>
<li>Variants default to published (opt-out model). Existing apps that publish at the product level continue to work without modification.  </li>
<li>Variants can be created in an unpublished state in order to prevent early exposure to buyers.</li>
</ul>
<h4>What's new in the Admin GraphQL API</h4>
<ul>
<li><code>publishablePublish</code> and <code>publishableUnpublish</code> now accept <code>ProductVariant</code> IDs.  </li>
<li><code>ProductVariant</code> now adheres to the <code>Publishable</code> interface, similar to <code>Product</code> and  <code>Collection</code>, which includes <code>resourcePublicationv2</code> and <code>publishedOnPublication</code>  </li>
<li>Product feed webhooks fire with a product update for variant added and deleted when variants are published to the feed’s channel.  </li>
<li><code>variant_publication/create/update/delete</code> webhooks are still under development and will be shipped imminently.</li>
</ul>
<h4>What this means for your app</h4>
<ul>
<li>Channel apps using product feeds should not require any changes to work - the product feed adds and removes variants to the product and an incremental sync webhook is triggered.  </li>
<li>Channels or pseudo channels that do not use product feeds and rely on reading publication state via the admin graphql API should implement support by reading the respective publication state of variants via <code>ProductVariant.resourcePublicationsv2</code>.  </li>
<li>Apps that create variants after product publication occurs: new variants default to published in all of the parent product's publications. If your app plans to create variants in an unpublished state,  <code>productSet</code> and <code>productVariantBulkCreate</code> both include a <code>variant.published: false</code>  field to create variants as unpublished.  </li>
<li>Apps that publish products: no changes required. Continue calling publishablePublish on products as before. Consider implementing variant publishing support if unpublishing variants is relevant to your apps workflows.</li>
</ul>
<p><a href="https://shopify.dev/docs/apps/build/sales-channels/product-publishing#variant-level-publishing" target="_blank" class="body-link">Read the developer guide →</a>  </p>
</div> ]]></description>
    <pubDate>Thu, 07 May 2026 17:00:00 +0000</pubDate>
    <atom:published>2026-05-07T17:00:00.000Z</atom:published>
    <atom:updated>2026-05-07T17:14:08.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <category>Admin GraphQL API</category>
    <category>Storefront API</category>
    <category>2026-07</category>
    <link>https://shopify.dev/changelog/publish-and-unpublish-product-variants-independently-from-product</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/publish-and-unpublish-product-variants-independently-from-product</guid>
  </item>
  <item>
    <title>App deployment in CI/CD is now available for all apps</title>
    <description><![CDATA[ <div class=""><p>App deployment in CI/CD is now available for all apps through app automation tokens on the Dev Dashboard. These tokens offer app-scoped authentication, allowing you to use the latest Shopify CLI to automate app releases in GitHub Workflows and similar tools. App-scoped authentication ensures that each token is specific to an individual app, enhancing security and control.</p>
<p>To deploy your app using an app automation token, set the token as an environment variable and execute the deployment command:</p>
<pre><code class="language-bash">export SHOPIFY_APP_AUTOMATION_TOKEN=&quot;your-app-automation-token&quot;
shopify app deploy --config production --allow-updates
</code></pre>
<p>App automation tokens replace the CLI tokens previously generated on the Partner Dashboard. While existing CLI tokens will remain functional until they expire, transitioning to app automation tokens is recommended for enhanced security and functionality. <a href="https://shopify.dev/docs/apps/build/dev-dashboard/app-automation-tokens#migrate-from-partner-dashboard-tokens" target="_blank" class="body-link">Learn more about migrating to app automation tokens</a>.</p>
<p>For further information on app automation tokens, visit Shopify.dev:</p>
<ul>
<li><a href="https://shopify.dev/docs/apps/build/dev-dashboard/app-automation-tokens" target="_blank" class="body-link">Managing app automation tokens</a></li>
<li><a href="https://shopify.dev/docs/apps/launch/deployment/deploy-in-ci-cd-pipeline" target="_blank" class="body-link">Deploy app components in a CD pipeline</a></li>
</ul>
</div> ]]></description>
    <pubDate>Wed, 06 May 2026 16:00:00 +0000</pubDate>
    <atom:published>2026-05-06T16:00:00.000Z</atom:published>
    <atom:updated>2026-05-06T17:08:52.000Z</atom:updated>
    <category>Action Required</category>
    <category>Tools</category>
    <category>New</category>
    <link>https://shopify.dev/changelog/app-deployment-in-cicd-is-now-available-for-all-apps</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/app-deployment-in-cicd-is-now-available-for-all-apps</guid>
  </item>
  <item>
    <title>Ship and pickup in one order now available in feature preview</title>
    <description><![CDATA[ <div class=""><p>Shopify Plus and Enterprise merchants will soon be able to enable a single checkout experience where customers can choose both shipping and store pickup within the same order. Previously, customers had to place separate orders for each delivery method.</p>
<p>This change impacts how delivery and fulfillment information flows through checkout. If your app reads, calculates, or displays delivery and fulfillment information, the testing window is open now. Enable <a href="https://dev.shopify.com/dashboard" target="_blank" class="body-link">feature preview</a> and make the necessary updates before this rolls out to merchants.</p>
<p>Apps that have not been updated may cause checkout errors, incorrect calculations, or failed fulfillment routing, impacting the merchant's checkout experience.</p>
<p><strong>What changed</strong>
When a merchant has both shipping and local pickup enabled, customers can now choose between store pickup or shipping for each item in their cart during checkout. This creates a single order with multiple fulfillment orders: one for shipping, one for pickup.</p>
<p>There are no new API fields or breaking schema changes. However, existing API fields now return data in new combinations:</p>
<ul>
<li>Checkouts can have multiple deliveryGroups: each group represents how different items are to be fulfilled.</li>
<li>Orders can contain fulfillment orders with different delivery methods (SHIPPING and PICK_UP) within the same order.</li>
<li>Fulfillment orders include a delivery_method field that identifies the fulfillment method for each group.</li>
</ul>
<p><strong>What you need to do</strong></p>
<ol>
<li>Review the <a href="https://cdn.shopify.com/static/checkout/Dev%20Feature%20Preview%20Testing%20Guide%20(2).pdf" target="_blank" class="body-link">testing guide</a>. </li>
<li>Audit your app's assumptions. <strong>Identify any logic that assumes a single delivery method per order.</strong></li>
<li>Test your app in <a href="https://dev.shopify.com/dashboard" target="_blank" class="body-link">feature preview</a><ul>
<li>Go to &quot;Dev stores&quot; and create a dev store.</li>
<li>Make sure to select &quot;Plus&quot; under Shopify Plan and &quot;Ship and pickup&quot; under Test a feature preview on this store.</li>
</ul>
</li>
<li>Verify your app handles the order correctly end-to-end. <ul>
<li>Place a test order with both shipped and pickup items. </li>
<li>Ensure your app reads the delivery_method field on fulfillment orders and routes items accordingly.</li>
</ul>
</li>
<li>If your app update changes merchant-facing behavior or workflows, communicate those changes to your merchants as soon as possible.</li>
</ol>
<p>Visit the <a href="https://community.shopify.dev/t/ship-and-pickup-in-one-order-is-coming-test-now-in-feature-preview/33009" target="_blank" class="body-link">developer forum</a> for questions and updates. </p>
</div> ]]></description>
    <pubDate>Wed, 06 May 2026 16:00:00 +0000</pubDate>
    <atom:published>2026-05-06T16:00:00.000Z</atom:published>
    <atom:updated>2026-05-06T17:18:37.000Z</atom:updated>
    <category>Action Required</category>
    <category>API</category>
    <category>New</category>
    <category>Admin Extensions</category>
    <category>Admin GraphQL API</category>
    <category>Checkout UI</category>
    <category>Customer Accounts</category>
    <category>Functions</category>
    <category>Storefront API</category>
    <link>https://shopify.dev/changelog/ship-and-pickup-in-one-order-feature-preview</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/ship-and-pickup-in-one-order-feature-preview</guid>
  </item>
  <item>
    <title>More admin intents now support Settings</title>
    <description><![CDATA[ <div class=""><p>Seven new Settings intents let apps open editors for notifications, payment capture, gift cards, delivery profiles, and business details. This builds on the <a href="https://shopify.dev/changelog/admin-intents-now-support-settings" target="_blank" class="body-link">initial Settings intents release</a> from March.</p>
<p>With a single API call, your app opens the relevant Settings section as a contextual overlay and scrolls the merchant directly to the field they need to edit.</p>
<h2>New intents</h2>
<h3>Notifications</h3>
<ul>
<li><code>edit:settings/NotificationsSenderEmail</code></li>
<li><code>edit:settings/NotificationsStaff</code></li>
</ul>
<h3>Payments and gift cards</h3>
<ul>
<li><code>edit:settings/PaymentCaptureMethod</code></li>
<li><code>edit:settings/GiftCardExpiration</code></li>
</ul>
<h3>Delivery</h3>
<ul>
<li><code>create:shopify/DeliveryProfile</code></li>
<li><code>edit:shopify/DeliveryProfile</code></li>
</ul>
<h3>Business</h3>
<ul>
<li><code>edit:settings/BusinessDetails</code></li>
</ul>
<p>Each intent opens the relevant Settings page in a page stack and scrolls the merchant directly to the targeted card, following the pattern established in the initial release.</p>
<h2>Resources</h2>
<ul>
<li>Read up on <a href="https://shopify.dev/docs/apps/build/admin/admin-intents" target="_blank" class="body-link">admin intents</a></li>
<li>Learn more about <a href="https://shopify.dev/docs/apps/build/admin/admin-intents#supported-resources" target="_blank" class="body-link">supported Shopify resources</a></li>
<li>Leave us feedback in the <a href="https://community.shopify.dev/" target="_blank" class="body-link">Shopify Developer Community</a></li>
</ul>
</div> ]]></description>
    <pubDate>Wed, 06 May 2026 12:30:00 +0000</pubDate>
    <atom:published>2026-05-06T12:30:00.000Z</atom:published>
    <atom:updated>2026-05-06T12:30:00.000Z</atom:updated>
    <category>API</category>
    <category>Update</category>
    <link>https://shopify.dev/changelog/more-admin-intents-now-support-settings</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/more-admin-intents-now-support-settings</guid>
  </item>
  <item>
    <title>Add actor field to subscription contract and billing attempt mutations</title>
    <description><![CDATA[ <div class=""><p>We have introduced a new <code>actor</code> field in subscription mutations to help you track who initiated an action - whether it was the customer, the merchant, or the partner app's automated system.</p>
<p>You can now include an <code>actor</code> argument when creating billing attempts or editing subscription contracts. This field accepts the following values:</p>
<ul>
<li><code>customer</code>: The buyer initiated the action (e.g., clicking &quot;pay now&quot; in a customer portal).</li>
<li><code>merchant</code>: A merchant or their staff manually initiated the action.</li>
<li><code>partner</code>: The partner app's automated system initiated the action (e.g., scheduled billing or retry logic).</li>
</ul>
<p>This field is available in the following Admin API mutations:</p>
<p><strong>Billing Attempts:</strong></p>
<ul>
<li><code>subscriptionBillingAttemptCreate</code> (via <code>subscriptionBillingAttemptInput.actor</code>)</li>
<li><code>subscriptionBillingCycleCharge</code></li>
<li><code>subscriptionBillingCycleBulkCharge</code></li>
</ul>
<p><strong>Contract Edits:</strong></p>
<ul>
<li><code>subscriptionContractCreate</code></li>
<li><code>subscriptionContractUpdate</code></li>
<li><code>subscriptionContractAtomicCreate</code></li>
<li><code>subscriptionContractProductChange</code></li>
<li><code>subscriptionBillingCycleContractEdit</code></li>
</ul>
<p><strong>Status Updates:</strong></p>
<ul>
<li><code>subscriptionContractActivate</code></li>
<li><code>subscriptionContractPause</code></li>
<li><code>subscriptionContractCancel</code></li>
<li><code>subscriptionContractFail</code></li>
<li><code>subscriptionContractExpire</code></li>
</ul>
</div> ]]></description>
    <pubDate>Mon, 04 May 2026 16:00:00 +0000</pubDate>
    <atom:published>2026-05-04T16:00:00.000Z</atom:published>
    <atom:updated>2026-05-06T15:40:44.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <category>Admin GraphQL API</category>
    <category>2026-07</category>
    <link>https://shopify.dev/changelog/add-actor-field-to-subscription-contract-and-billing-attempt-mutations</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/add-actor-field-to-subscription-contract-and-billing-attempt-mutations</guid>
  </item>
  <item>
    <title>Default value of `appliesOnSubscription` changed to `true` for app discount inputs</title>
    <description><![CDATA[ <div class=""><p>The default value of <code>appliesOnSubscription</code> has been changed from <code>false</code> to <code>true</code> on the <a href="https://shopify.dev/docs/api/admin-graphql/latest/input-objects/DiscountCodeAppInput" target="_blank" class="body-link"><code>DiscountCodeAppInput</code></a> and <a href="https://shopify.dev/docs/api/admin-graphql/latest/input-objects/DiscountAutomaticAppInput" target="_blank" class="body-link"><code>DiscountAutomaticAppInput</code></a> input types in GraphQL Admin API.</p>
<p><strong>No action is required.</strong> This default value change has no effect on how discounts are applied at checkout. If your app explicitly sets <code>appliesOnSubscription</code> when creating or updating app discounts, your behavior is unchanged.</p>
<p>This change applies across all active API versions. The <code>appliesOnOneTimePurchase</code> field already defaults to <code>true</code> and is unchanged.</p>
</div> ]]></description>
    <pubDate>Mon, 04 May 2026 16:00:00 +0000</pubDate>
    <atom:published>2026-05-04T16:00:00.000Z</atom:published>
    <atom:updated>2026-05-04T16:00:00.000Z</atom:updated>
    <category>API</category>
    <category>Update</category>
    <category>Admin GraphQL API</category>
    <category>2026-07</category>
    <link>https://shopify.dev/changelog/default-value-of-appliesonsubscription-changed-to-true-for-app-discount-inputs</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/default-value-of-appliesonsubscription-changed-to-true-for-app-discount-inputs</guid>
  </item>
  <item>
    <title>Multiple product discounts can apply on a single cart line</title>
    <description><![CDATA[ <div class=""><p>In version <code>2026-04</code> of the GraphQL Admin API, we're introducing support for applying multiple product discounts on a single cart line. This feature will enable merchants to continue migrating Scripts ahead of the June 30th, 2026 sunset date.</p>
<p>To learn more about configuring discount combinations, please refer to the documentation for the <a href="https://shopify.dev/docs/api/admin-graphql/latest/objects/DiscountAutomaticBasic#field-DiscountAutomaticBasic.fields.combinesWith" target="_blank" class="body-link">GraphQL Admin API</a>.</p>
</div> ]]></description>
    <pubDate>Thu, 30 Apr 2026 11:00:00 +0000</pubDate>
    <atom:published>2026-04-30T11:00:00.000Z</atom:published>
    <atom:updated>2026-04-30T13:23:24.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <category>Admin GraphQL API</category>
    <category>2026-04</category>
    <link>https://shopify.dev/changelog/multiple-product-discounts-can-apply-on-a-single-cart-line</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/multiple-product-discounts-can-apply-on-a-single-cart-line</guid>
  </item>
  <item>
    <title>Analytics metric targets now available in the GraphQL Admin API</title>
    <description><![CDATA[ <div class=""><p>You can now create and manage metric targets for merchants using four new GraphQL Admin API operations: <a href="https://shopify.dev/docs/api/admin-graphql/latest/queries/analyticstargets" target="_blank" class="body-link"><code>analyticsTargets</code></a>, <a href="https://shopify.dev/docs/api/admin-graphql/latest/mutations/analyticstargetcreate" target="_blank" class="body-link"><code>analyticsTargetCreate</code></a>, <a href="https://shopify.dev/docs/api/admin-graphql/latest/mutations/analyticstargetupdate" target="_blank" class="body-link"><code>analyticsTargetUpdate</code></a>, and <a href="https://shopify.dev/docs/api/admin-graphql/latest/mutations/analyticstargetsdelete" target="_blank" class="body-link"><code>analyticsTargetsDelete</code></a>.</p>
<p>With targets, merchants can set numeric goals for analytics metrics, such as &quot;achieve $50K in gross sales this quarter,&quot; and track their progress with a visual gauge. The API has been available to apps from the start, enabling you to build on the same foundation that supports targets in the Shopify admin.</p>
<p>Whether you're developing a goal-setting tool, a reporting dashboard, or a planning app, you can now read and write the same targets that merchants view in their analytics, using the same API, rules, and validation.</p>
<h3>What you can do</h3>
<ul>
<li><strong>Create</strong>: Specify a metric, target amount, time period, and an optional filter (for example, limit to a specific sales channel or product).</li>
<li><strong>Read</strong>: Retrieve targets for a shop using <code>analyticsTargets</code>, with support for pagination.</li>
<li><strong>Update</strong>: Modify the metric, name, amount, time period, or filters.</li>
<li><strong>Delete</strong>: Remove targets using <code>analyticsTargetsDelete</code>. Deleted targets can't be recovered.</li>
</ul>
<h3>Key details</h3>
<ul>
<li><strong>Scope</strong>: Requires <a href="https://shopify.dev/docs/api/usage/access-scopes" target="_blank" class="body-link"><code>read_reports</code></a> and <a href="https://shopify.dev/docs/api/usage/access-scopes" target="_blank" class="body-link"><code>write_reports</code></a> permissions.</li>
<li><strong>Deduplication</strong>: The API uniquely identifies each target by its metric, date range, and filters. Attempting to create a duplicate results in a <code>userError</code> with guidance on necessary changes.</li>
<li><strong>Status computation</strong>: The API automatically derives the status field (In progress, Achieved, Not achieved, Upcoming) from the target's date range and current metric value at query time.</li>
<li><strong>Filters</strong>: Each target can have one dimension-based filter in the <a href="https://shopify.dev/docs/api/shopifyql#where" target="_blank" class="body-link"><code>WHERE</code> statement of ShopifyQL</a> using <code>=</code> or <code>IN</code> operators.</li>
</ul>
<h3>Use cases</h3>
<ul>
<li><strong>Goal-setting apps</strong>: Create targets for merchants based on historical performance or industry benchmarks, providing smart defaults.</li>
<li><strong>Reporting and BI tools</strong>: Access merchant targets and display progress alongside your visualizations, ensuring consistency with Shopify.</li>
<li><strong>Planning and forecasting apps</strong>: Integrate external goals into Shopify Analytics, offering merchants a unified place to track all targets.</li>
<li><strong>Agency dashboards</strong>: Programmatically set and monitor targets across multiple client stores.</li>
</ul>
<p>Targets created by your app appear alongside merchant-created targets in the Shopify admin, on the <strong>Targets</strong> index page with their own target gauge, and on merchant dashboards. Merchants can manage them consistently, regardless of their origin.</p>
<p><a href="https://shopify.dev/docs/api/admin-graphql/latest/queries/analyticstargets" target="_blank" class="body-link">View the API reference →</a></p>
<h3>Related: new <code>ColumnDataType</code> enum values</h3>
<p>API version <code>2026-04</code> adds two new enum values to <a href="https://shopify.dev/docs/api/admin-graphql/latest/enums/ColumnDataType" target="_blank" class="body-link"><code>ColumnDataType</code></a> in <a href="https://shopify.dev/docs/api/admin-graphql/latest/objects/ShopifyqlTableDataColumn" target="_blank" class="body-link"><code>ShopifyqlTableDataColumn</code></a>:</p>
<ul>
<li><code>UNITLESS_SCALAR</code>: Represents a dimensionless numeric score with no associated unit. Applied to web performance metrics: <code>p50_cls</code>, <code>p75_cls</code>, <code>p90_cls</code>, <code>p99_cls</code> (Cumulative Layout Shift percentiles).</li>
<li><code>MULTIPLIER</code>: Represents a ratio or multiplier value (for example, 3.2x). Applied to <code>shop_campaign_return_on_ad_spend</code> (Return on ad spend).</li>
</ul>
<p>These metrics previously returned <code>FLOAT</code>. This change doesn't affect callers on API versions prior to <code>2026-04</code>.</p>
</div> ]]></description>
    <pubDate>Wed, 29 Apr 2026 16:00:00 +0000</pubDate>
    <atom:published>2026-04-29T16:00:00.000Z</atom:published>
    <atom:updated>2026-04-29T16:00:00.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <category>Admin GraphQL API</category>
    <link>https://shopify.dev/changelog/analytics-metric-targets-now-available-in-the-graphql-admin-api</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/analytics-metric-targets-now-available-in-the-graphql-admin-api</guid>
  </item>
  <item>
    <title>Update to app uninstall reasons</title>
    <description><![CDATA[ <div class=""><p>We have updated the app uninstall reasons in your Partner Dashboard and now require merchants to select a reason before removing an app. These changes provide clearer, more actionable insights into why merchants uninstall apps, helping you enhance your app experience.</p>
<p>When uninstalling, merchants will now see the following options and must choose one to complete the process:</p>
<ul>
<li>Testing multiple apps</li>
<li>Store is closing or pausing</li>
<li>Not using app now</li>
<li>Not satisfied with app features</li>
<li>Not satisfied with customer support</li>
<li>Too expensive</li>
<li>Not working properly with store</li>
<li>Other (please specify)</li>
</ul>
</div> ]]></description>
    <pubDate>Wed, 29 Apr 2026 14:25:00 +0000</pubDate>
    <atom:published>2026-04-29T14:25:00.000Z</atom:published>
    <atom:updated>2026-04-29T14:25:00.000Z</atom:updated>
    <category>App store</category>
    <category>Update</category>
    <link>https://shopify.dev/changelog/update-to-app-uninstall-reasons</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/update-to-app-uninstall-reasons</guid>
  </item>
  <item>
    <title>Minor rounding change for custom line item discounts in POS 11.5</title>
    <description><![CDATA[ <div class=""><p>Starting with POS version 11.5, we are updating the internal calculation method for custom fixed-amount line item discounts. These discounts will now be applied on a per-unit basis rather than across the entire line. Note that this change only affects fixed-amount discounts; percentage discounts remain unchanged.</p>
<p>If your app uses <code>setLineItemDiscount</code> or <code>bulkSetLineItemDiscounts</code> from the Cart API with a <code>FixedAmount</code> discount type, you can continue to pass the total discount amount for the line item as you currently do. The POS system will automatically handle the conversion.</p>
<p>In most cases, the total discount will remain the same. However, for amounts that don't divide evenly by quantity, there might be a rounding difference of up to one cent, the smallest denomination in the local currency. For example, a $5.00 discount applied to 3 items becomes $1.67 per unit, totaling $5.01 instead of $5.00.</p>
<p><strong>No action is required</strong> for extensions using API version 2026-04 or earlier. In a future API version, extensions will need to pass per-unit discount amounts directly. We will provide more details as the release approaches.</p>
<p>For more information, refer to the <a href="https://shopify.dev/docs/api/pos-ui-extensions/latest/target-apis/contextual-apis/cart-api" target="_blank" class="body-link">Cart API reference</a>.</p>
</div> ]]></description>
    <pubDate>Mon, 27 Apr 2026 16:00:00 +0000</pubDate>
    <atom:published>2026-04-27T16:00:00.000Z</atom:published>
    <atom:updated>2026-04-27T16:00:00.000Z</atom:updated>
    <category>API</category>
    <category>Update</category>
    <category>POS Extensions</category>
    <link>https://shopify.dev/changelog/minor-rounding-change-for-custom-line-item-discounts-in-pos-115</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/minor-rounding-change-for-custom-line-item-discounts-in-pos-115</guid>
  </item>
  <item>
    <title>`LineItem.priceAfterAllDiscountsBeforeTaxesSet` field now available</title>
    <description><![CDATA[ <div class=""><p>The <code>LineItem</code> object in the GraphQL Admin API now includes a [<code>priceAfterAllDiscountsBeforeTaxesSet</code>(<a href="https://shopify.dev/docs/api/admin-graphql/2026-07/objects/LineItem#field-LineItem.fields.priceAfterAllDiscountsBeforeTaxesSet" target="_blank" class="body-link">https://shopify.dev/docs/api/admin-graphql/2026-07/objects/LineItem#field-LineItem.fields.priceAfterAllDiscountsBeforeTaxesSet</a>) field, which is equivalent to the REST API's <code>current_subtotal_price_set</code> on line items. This field returns the total price of a line item in both shop and presentment currencies after all discounts have been applied, excluding refunded and removed quantities. The value doesn't include taxes.</p>
<p>This is useful for order export workflows where you need the line-level subtotal after discounts but before tax.</p>
</div> ]]></description>
    <pubDate>Mon, 27 Apr 2026 16:00:00 +0000</pubDate>
    <atom:published>2026-04-27T16:00:00.000Z</atom:published>
    <atom:updated>2026-05-12T13:46:39.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <category>Admin GraphQL API</category>
    <category>2026-07</category>
    <link>https://shopify.dev/changelog/lineitem-priceafteralldiscountsbeforetaxesset-field-now-available</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/lineitem-priceafteralldiscountsbeforetaxesset-field-now-available</guid>
  </item>
  <item>
    <title>Deprecation of checkout metafields in checkout and customer account UI extensions</title>
    <description><![CDATA[ <div class=""><p>As of API version 2026-04, the ability to read and write checkout metafields in checkout and customer account UI extensions has been removed. Instead, checkout metafields have been replaced by cart metafields in checkout UI extensions and order metafields in customer account UI extensions.</p>
<h3>Action Required</h3>
<p>If you are using checkout metafields in older API versions, it is essential to upgrade to version 2026-04. Follow our guides to ensure a smooth transition:</p>
<ul>
<li><a href="https://shopify.dev/docs/api/checkout-ui-extensions/2026-04/upgrading-to-2026-04#migrate-to-cart-metafields" target="_blank" class="body-link">Migrate to cart metafields in checkout UI extensions</a> </li>
<li><a href="https://shopify.dev/docs/api/customer-account-ui-extensions/2026-04/upgrading-to-2026-04#migrate-to-order-metafields" target="_blank" class="body-link">Migrate to order metafields in customer account UI extensions</a></li>
</ul>
<p>Additionally, order metafield definitions now support a new capability that automatically copies values from cart metafields to order metafields upon order creation. This enhancement streamlines data management between cart and order processes. <a href="https://shopify.dev/docs/apps/build/metafields/use-metafield-capabilities#cart-to-order-copyable" target="_blank" class="body-link">Learn more</a></p>
</div> ]]></description>
    <pubDate>Mon, 27 Apr 2026 15:30:00 +0000</pubDate>
    <atom:published>2026-04-27T15:30:00.000Z</atom:published>
    <atom:updated>2026-04-27T15:33:07.000Z</atom:updated>
    <category>Action Required</category>
    <category>API</category>
    <category>Deprecation announcement</category>
    <category>Checkout UI</category>
    <category>Customer Accounts</category>
    <category>2026-04</category>
    <link>https://shopify.dev/changelog/deprecation-of-checkout-metafields-in-checkout-and-customer-account-ui-extensions</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/deprecation-of-checkout-metafields-in-checkout-and-customer-account-ui-extensions</guid>
  </item>
  <item>
    <title>Scannable discount codes</title>
    <description><![CDATA[ <div class=""><p>As of POS version 11.5, merchants can generate scannable QR codes for any discount code in the Shopify Admin. These QR codes can be applied by both POS staff at checkout and by customers in online store sessions.</p>
<h3>What this means for discount apps</h3>
<p>No changes are required with this release. If your app creates discount codes, you can now generate QR codes for them that encode the store's discount URL. </p>
<h3>What you should do</h3>
<p>Shopify uses the format https://{shop}.myshopify.com/discount/{CODE} with the following encoding caveats:</p>
<ul>
<li><strong>Simple discount codes encode directly.</strong> For example, the discount code <code>SUMMER20</code> becomes <code>SUMMER20</code> in the final QR code URL. </li>
<li><strong>Special characters are URL-encoded twice.</strong> For example, the discount code <code>SAVE 10%</code> becomes <code>SAVE%252010%2525</code> in the final QR code URL.</li>
</ul>
<p>If you want to include QR codes as shareable links in your apps, you’ll need to replicate the same URL-encoding used by Shopify for your discount codes. </p>
</div> ]]></description>
    <pubDate>Mon, 27 Apr 2026 04:00:00 +0000</pubDate>
    <atom:published>2026-04-27T04:00:00.000Z</atom:published>
    <atom:updated>2026-04-27T04:00:00.000Z</atom:updated>
    <category>Tools</category>
    <category>New</category>
    <link>https://shopify.dev/changelog/scannable-discount-codes</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/scannable-discount-codes</guid>
  </item>
  <item>
    <title>`totalUnsettledSet` calculation fixed for pending captures</title>
    <description><![CDATA[ <div class=""><p>The <a href="https://shopify.dev/docs/api/admin-graphql/latest/objects/OrderTransaction#field-OrderTransaction.fields.totalUnsettledSet" target="_blank" class="body-link"><code>totalUnsettledSet</code> field</a> on the <code>OrderTransaction</code> object now correctly calculates the unsettled amount when a capture is in pending status. The affected field is <code>OrderTransaction.totalUnsettledSet</code>.</p>
<h2>What's changed</h2>
<p>Previously, when a capture was pending, <code>totalUnsettledSet</code> was double-counting by incorrectly returning the authorization amount plus the pending capture amount. Now it correctly returns the actual unsettled amount.</p>
<p>For example, for a $100 authorization with a $50 pending capture:</p>
<ul>
<li>Before: Returned $150 (incorrect)</li>
<li>After: Returns $100 (correct)</li>
</ul>
<h2>What you need to do</h2>
<p>Nothing. Your existing queries will continue to work and no changes to your code are required. The returned value will now be correct.</p>
<h2>What this affects</h2>
<p>This bug only affects multi-capturable orders, which are orders where partial or multiple captures are supported.</p>
<p>According to our API breaking change policy, bug fixes that correct values to match documented behavior are applied immediately across all API versions.</p>
<h2>Why we changed it</h2>
<p>This update fixes a bug where the calculation double-counted during pending capture states. The <code>totalUnsettledSet</code> field represents the available amount with currency to capture on the gateway, but the previous value didn't reflect this.</p>
<p>This bug was introduced when multi-capturable support was added, and became more visible after Shopify Payments migrated to a flow where captures transition through <code>PENDING</code> status before <code>SUCCESS</code>.</p>
</div> ]]></description>
    <pubDate>Fri, 24 Apr 2026 17:00:00 +0000</pubDate>
    <atom:published>2026-04-24T17:00:00.000Z</atom:published>
    <atom:updated>2026-04-24T17:00:00.000Z</atom:updated>
    <category>API</category>
    <category>Breaking API Change</category>
    <category>Admin GraphQL API</category>
    <link>https://shopify.dev/changelog/totalunsettledset-calculation-fixed-for-pending-captures</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/totalunsettledset-calculation-fixed-for-pending-captures</guid>
  </item>
  <item>
    <title>Customer tax settings now available in Admin API</title>
    <description><![CDATA[ <div class=""><p>Starting in API version 2026-07, the <a href="https://shopify.dev/docs/api/admin-graphql/2026-07/objects/Customer" target="_blank" class="body-link"><code>taxSettings</code> field on the <code>Customer</code> object</a> will be publicly accessible in the Admin GraphQL API. </p>
<p>Apps with the <code>read_customers</code> or <code>read_taxes</code> access scopes can now query a customer's tax ID, such as a VAT number, which is collected and validated during checkout. This update aligns with the <code>CompanyLocation.taxSettings.taxRegistrationId</code>, which has been available since API version 2025-01 for B2B customers.</p>
<p>Example query:</p>
<pre><code class="language-json">{
  customer(id: &quot;gid://shopify/Customer/customer_id&quot;) {
    taxSettings {
      taxId
    }
  }
}
</code></pre>
<p>This is a read-only change. The <code>taxId</code> field returns the tax ID as a string or null if the customer hasn't provided one. The <code>taxIdValidation</code> sub-field, which indicates the validation status, is not included in the public API. Apps that need access to this field must have approved protected customer data access. </p>
<p>For more information, refer to the <a href="https://shopify.dev/docs/api/admin-graphql/2026-07/objects/Customer" target="_blank" class="body-link"><code>Customer</code> object</a> in the Admin GraphQL API reference.</p>
</div> ]]></description>
    <pubDate>Fri, 24 Apr 2026 16:00:00 +0000</pubDate>
    <atom:published>2026-04-24T16:00:00.000Z</atom:published>
    <atom:updated>2026-04-24T16:00:00.000Z</atom:updated>
    <category>API</category>
    <category>Update</category>
    <category>Admin GraphQL API</category>
    <category>2026-07</category>
    <link>https://shopify.dev/changelog/customer-tax-settings-now-available-in-admin-api</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/customer-tax-settings-now-available-in-admin-api</guid>
  </item>
  <item>
    <title>Automatic CSS subsetting for `{% stylesheet %}` tags</title>
    <description><![CDATA[ <div class=""><p>Shopify is introducing CSS content subsetting for <code>{% stylesheet %}</code> tags to improve storefront performance.</p>
<p>Starting April 20, 2026, Shopify only delivers the CSS from <code>{% stylesheet %}</code> tags that are relevant to the sections, blocks, and snippets rendered on each page, instead of serving all <code>{% stylesheet %}</code> CSS on every page load.</p>
<h2>What this means for your theme</h2>
<p>If your theme's CSS classes are self-contained – each file's <code>{% stylesheet %}</code> only styles HTML elements within that same file or its direct children (rendered via <code>{% render %}</code>) – no changes are needed. Your theme is already compatible.</p>
<p>However, if a file's <code>{% stylesheet %}</code> defines CSS classes that are used by HTML elements in other, unrelated files, those styles may not be included on pages where the defining file isn't rendered. This is the pattern to watch for and fix.</p>
<p>Please refer to the <a href="https://shopify.dev/docs/storefronts/themes/best-practices/performance/stylesheet-subsetting" target="_blank" class="body-link">stylesheet subsetting docs</a> for additional detail and guidance.</p>
</div> ]]></description>
    <pubDate>Thu, 23 Apr 2026 16:00:00 +0000</pubDate>
    <atom:published>2026-04-23T16:00:00.000Z</atom:published>
    <atom:updated>2026-04-23T16:00:00.000Z</atom:updated>
    <category>Action Required</category>
    <category>Themes</category>
    <category>Update</category>
    <link>https://shopify.dev/changelog/automatic-css-subsetting-for-stylesheet-tags</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/automatic-css-subsetting-for-stylesheet-tags</guid>
  </item>
  <item>
    <title>Storefront Catalog MCP now implements UCP</title>
    <description><![CDATA[ <div class=""><h3>What’s changing</h3>
<p>The following UCP catalog tools in Storefront Catalog are now available:</p>
<p>  - `search_catalog`:  Search a store's product catalog with filters, pagination, and buyer context<br>  - `lookup_catalog`: Batch lookup products or variants by identifier with inputs correlation<br>  - `get_product`: Retrieve full product details with interactive variant selection, availability signals, and more</p>
<p>Tool calls can be placed against the <code>https://{storedomain}/api/ucp/mcp</code> endpoint. </p>
<h3>What you should do</h3>
<p>The previous search and lookup tools are deprecated in favor of the above tool names and endpoint, as well as related updates to their request and response shapes to match UCP. The old versions will be maintained until June 15th, 2026, but all documentation will refer to the latest version. </p>
<p>If you’re building with Storefront MCP tools:</p>
<ul>
<li>Update tool names to one of the supported tools above.  </li>
<li>Update endpoints to use <code>https://{storedomain}/api/ucp/mcp</code>.  </li>
<li>Consult the update request and response schemas for all tool calls and update your app to match.</li>
</ul>
<p>See the documentation for <a href="https://shopify.dev/docs/agents/catalog/storefront-catalog" target="_blank" class="body-link">Storefront Catalog MCP</a> for more details.</p>
</div> ]]></description>
    <pubDate>Wed, 22 Apr 2026 19:30:00 +0000</pubDate>
    <atom:published>2026-04-22T19:30:00.000Z</atom:published>
    <atom:updated>2026-04-22T19:30:00.000Z</atom:updated>
    <category>Action Required</category>
    <category>API</category>
    <category>Breaking API Change</category>
    <link>https://shopify.dev/changelog/storefront-catalog-mcp-now-implements-ucp</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/storefront-catalog-mcp-now-implements-ucp</guid>
  </item>
  <item>
    <title>New app submission experience in the Partner Dashboard</title>
    <description><![CDATA[ <div class=""><p>We updated the app submission experience to help apps get reviewed and published faster. Three changes are live now in the Partner Dashboard:</p>
<p><strong>End-to-end review management in Partner Dashboard</strong>
Review feedback for app submissions now lives in the Partner Dashboard under App &gt; Distribution. Each requirement now has its own status, reviewer comments, and a way to ask questions directly. You can see exactly what's outstanding and resubmit when everything is resolved.</p>
<ul>
<li><strong>Requirement-level tracking:</strong> Each requirement that needs attention has its own status tracker. You'll see what failed with associated feedback from the reviewer. </li>
<li><strong>Structured fix workflow:</strong> Address each requirement individually and mark it resolved before resubmitting. </li>
<li><strong>Blocked resubmission:</strong> You can't resubmit until all identified issues are resolved.</li>
</ul>
<p><strong>AI self-review tool</strong>
Before you submit your app, you can now run an AI-powered self-review that checks your app against App Store requirements. Run this before you submit, it takes two minutes and catches the obvious stuff that would bounce you back weeks later.  This is now available in the <a href="https://shopify.dev/docs/apps/build/ai-toolkit" target="_blank" class="body-link">Shopify AI toolkit</a>.  </p>
<p><strong>Automated pre-submission checks</strong>
We've expanded automated pre-submission checks so you'll know instantly if something needs fixing before a reviewer picks up your app:</p>
<ul>
<li><a href="https://shopify.dev/docs/apps/launch/shopify-app-store/app-store-requirements#use-theme-app-extensions" target="_blank" class="body-link">Theme app extensions requirement</a></li>
<li><a href="https://shopify.dev/docs/apps/launch/shopify-app-store/app-store-requirements#app-store-listing" target="_blank" class="body-link">App Store Listing requirements</a></li>
</ul>
<p><strong>What to do if you have an app in review</strong>
If your app is currently in the ‘Reviewed’ status with outstanding issues, your review continues through the existing email-based process. The new dashboard flow does not apply to this submission.</p>
<p>If your app is currently in the ‘Submitted’ status and waiting for review, no action is needed. When a reviewer evaluates your app, feedback will appear in the new dashboard experience.</p>
</div> ]]></description>
    <pubDate>Mon, 20 Apr 2026 16:15:00 +0000</pubDate>
    <atom:published>2026-04-20T16:15:00.000Z</atom:published>
    <atom:updated>2026-04-20T16:15:00.000Z</atom:updated>
    <category>App store</category>
    <category>New</category>
    <link>https://shopify.dev/changelog/new-app-submission-experience-in-the-partner-dashboard</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/new-app-submission-experience-in-the-partner-dashboard</guid>
  </item>
  <item>
    <title>Add `includeInactive` argument to `inventoryLevels` and `inventoryLevel` fields</title>
    <description><![CDATA[ <div class=""><p>As of API version 2026-04, you can pass <code>includeInactive: true</code> when querying the <code>inventoryLevels</code> or <a href="https://shopify.dev/docs/api/admin-graphql/latest/objects/InventoryLevel" target="_blank" class="body-link"><code>inventoryLevel</code></a> fields on <a href="https://shopify.dev/docs/api/admin-graphql/latest/objects/InventoryItem" target="_blank" class="body-link"><code>InventoryItem</code></a> and <a href="https://shopify.dev/docs/api/admin-graphql/latest/objects/Location" target="_blank" class="body-link"><code>Location</code></a> to include inactive inventory levels in the response. By default, only active inventory levels are returned.</p>
<h3>Why we made this change</h3>
<p>Previously, there was no way to retrieve inactive inventory levels through the API. The <code>includeInactive</code> argument gives apps explicit control over whether inactive levels are included in results.</p>
<h3>Impact on your app</h3>
<ul>
<li>GraphQL: In the 2026-04 and later API versions, the fields <a href="https://shopify.dev/docs/api/admin-graphql/2026-04/objects/InventoryItem#field-InventoryItem.fields.inventoryLevels" target="_blank" class="body-link"><code>InventoryItem.inventoryLevels</code></a>, <a href="https://shopify.dev/docs/api/admin-graphql/2026-04/objects/InventoryItem#field-InventoryItem.fields.inventoryLevel" target="_blank" class="body-link"><code>InventoryItem.inventoryLevel</code></a>, <a href="https://shopify.dev/docs/api/admin-graphql/2026-04/objects/Location#field-Location.fields.inventoryLevels" target="_blank" class="body-link"><code>Location.inventoryLevels</code></a>, and <a href="https://shopify.dev/docs/api/admin-graphql/2026-04/objects/Location#field-Location.fields.inventoryLevel" target="_blank" class="body-link"><code>Location.inventoryLevel</code></a> accept a new optional <code>includeInactive</code> boolean argument. The default is false, ensuring existing queries remain unaffected.</li>
</ul>
<h3>What you need to do</h3>
<ul>
<li>No changes are required for existing queries, as they will continue to return only active inventory levels.</li>
<li>To access inactive inventory levels, include <code>includeInactive: true</code> in your queries.</li>
</ul>
</div> ]]></description>
    <pubDate>Fri, 17 Apr 2026 16:00:00 +0000</pubDate>
    <atom:published>2026-04-17T16:00:00.000Z</atom:published>
    <atom:updated>2026-04-17T16:00:00.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <category>Admin GraphQL API</category>
    <category>2026-04</category>
    <link>https://shopify.dev/changelog/add-includeinactive-argument-to-inventorylevels-and-inventorylevel-fields</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/add-includeinactive-argument-to-inventorylevels-and-inventorylevel-fields</guid>
  </item>
  <item>
    <title>Add `isActive` field to `InventoryLevel`</title>
    <description><![CDATA[ <div class=""><p>As of GraphQL Admin API version 2026-04 the <a href="https://shopify.dev/docs/api/admin-graphql/2026-04/objects/InventoryLevel" target="_blank" class="body-link"><code>InventoryLevel</code></a> object now includes an <code>isActive</code> boolean field, which indicates whether an inventory level is currently active. In this version, you can optionally query for inactive inventory levels, and the <code>isActive</code> field will help you distinguish between active and inactive levels.</p>
<h3>Why We Made This Change</h3>
<p>Previously, deactivating an inventory level would clear its associated quantities, and these inactive levels were not visible through the API. Starting with version 2026-04, deactivating an inventory level no longer clears its quantities. Inactive levels can be adjusted just like active ones, so the API now returns these inactive levels. The <code>isActive</code> field provides visibility into the activation status, allowing apps to differentiate between locations where inventory tracking has never occurred and those where it has been deactivated.</p>
<h3>Impact on Your App</h3>
<p>From GraphQL Admin API version 2026-04 onwards, queries on <code>InventoryLevel</code> may return inactive inventory levels that were previously excluded. Each inventory level now includes an <code>isActive</code> field, which you can use to filter or display activation status.</p>
<h3>What You Need to Do</h3>
<ul>
<li>No changes are required for existing queries, as they will continue to return only active inventory levels.</li>
<li>If you choose to <a href="https://shopify.dev/changelog/add-includeinactive-argument-to-inventorylevels-and-inventorylevel-fields" target="_blank" class="body-link">include inactive levels</a> in your query, review any logic that assumes all returned inventory levels are active. Use the <code>isActive</code> field to filter results if your app only requires active inventory levels.</li>
<li>Update any inventory level counts or aggregations to account for the inclusion of inactive levels.</li>
</ul>
</div> ]]></description>
    <pubDate>Fri, 17 Apr 2026 16:00:00 +0000</pubDate>
    <atom:published>2026-04-17T16:00:00.000Z</atom:published>
    <atom:updated>2026-04-17T16:00:00.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <category>Admin GraphQL API</category>
    <category>2026-04</category>
    <link>https://shopify.dev/changelog/add-isactive-field-to-inventorylevel</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/add-isactive-field-to-inventorylevel</guid>
  </item>
  <item>
    <title>`inventoryActivate` now preserves `available` quantity</title>
    <description><![CDATA[ <div class=""><p>As of API version 2026-04, using the <a href="https://shopify.dev/docs/api/admin-graphql/latest/mutations/inventoryactivate#top" target="_blank" class="body-link"><code>inventoryActivate</code></a> mutation without specifying an <code>available</code> or <code>onHand</code> argument will no longer default these values to zero. If an item was previously active at a location, any existing <code>active</code> and <code>onHand</code> quantities for the inactive <a href="https://shopify.dev/docs/api/admin-graphql/latest/objects/InventoryLevel" target="_blank" class="body-link"><code>InventoryLevel</code></a> will be retained.</p>
<h3>Why We Made This Change</h3>
<p>Previously, <code>inventoryActivate</code> would reset existing inventory quantities to zero, preventing merchants from independently tracking inventory from activation status. This behavior erased quantity history upon activation. The update allows merchants to manage inventory and activation separately, preserving their quantity history.</p>
<h3>Impact on Your App</h3>
<ul>
<li><strong>GraphQL</strong>: In the <code>unstable</code> or <code>2026-04</code> and later releases, using the <code>inventoryActivate</code> mutation without an <code>available</code> or <code>onHand</code> argument will preserve the pre-activation quantities.</li>
<li><strong>REST</strong>: In the <code>unstable</code> or <code>2026-04</code> and later releases, <code>POST</code> requests to <a href="https://shopify.dev/docs/api/admin-rest/latest/resources/inventorylevel#post-inventory-levels-connect" target="_blank" class="body-link"><code>inventory_levels/connect.json</code></a> will retain the pre-activation quantities.</li>
</ul>
<h3>What You Need to Do</h3>
<ul>
<li>Review any business logic that assumes <code>inventoryActivate</code> resets inventory quantities to zero for specified inventory items and locations.</li>
</ul>
</div> ]]></description>
    <pubDate>Fri, 17 Apr 2026 16:00:00 +0000</pubDate>
    <atom:published>2026-04-17T16:00:00.000Z</atom:published>
    <atom:updated>2026-04-17T16:00:00.000Z</atom:updated>
    <category>API</category>
    <category>Breaking API Change</category>
    <category>Admin GraphQL API</category>
    <category>Admin REST API</category>
    <category>2026-04</category>
    <link>https://shopify.dev/changelog/inventoryactivate-now-preserves-available-quantity</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/inventoryactivate-now-preserves-available-quantity</guid>
  </item>
  <item>
    <title>mTLS client certificate renewal for Payments Apps</title>
    <description><![CDATA[ <div class=""><p>Starting June 15, 2026, Shopify will renew its mTLS client certificate used by Payments Apps to verify that the client initiating the request is Shopify.</p>
<p>Unless you're using custom checks or validation logic, this update won't impact your live payments apps, as the new certificate is signed by the same <a href="https://shopify.dev/docs/apps/build/payments/considerations#shopifys-self-signed-certificate-authority-ca" target="_blank" class="body-link">Certificate Authority</a> as the current one.</p>
<h2>Who's affected</h2>
<p><a href="https://shopify.dev/docs/apps/build/payments" target="_blank" class="body-link">Payments Apps</a></p>
<h2>Reason for the change</h2>
<p>The current certificate will expire on July 24, 2026. It must be renewed before this date to ensure uninterrupted service.</p>
<h2>What you need to do</h2>
<p>Action is required if you use custom certification validation.</p>
<h3>If you use custom certificate validation</h3>
<p>Action is required before June 15, 2026. If your app checks the Common Name (CN) or other certificate-specific fields, you must update your validation logic to accept the new certificate.</p>
<h3>If you use standard mTLS validation</h3>
<p>No action is required. The new certificate is signed by the same CA.</p>
<p>For more information, refer to the <a href="https://shopify.dev/docs/apps/build/payments/considerations#new-certificate-effective-mid-june-2026" target="_blank" class="body-link">certificate details</a>.</p>
</div> ]]></description>
    <pubDate>Thu, 16 Apr 2026 01:00:00 +0000</pubDate>
    <atom:published>2026-04-16T01:00:00.000Z</atom:published>
    <atom:updated>2026-04-16T15:05:36.000Z</atom:updated>
    <category>Platform</category>
    <category>Update</category>
    <category>Payments Apps API</category>
    <link>https://shopify.dev/changelog/mtls-client-certificate-renewal-for-payments-apps</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/mtls-client-certificate-renewal-for-payments-apps</guid>
  </item>
  <item>
    <title>Added MOST_RELEVANT value for `CollectionSortOrder`</title>
    <description><![CDATA[ <div class=""><p>The <code>MOST_RELEVANT</code> value is now available to the GraphQL Admin API's <a href="https://shopify.dev/docs/api/admin-graphql/2026-07/enums/CollectionSortOrder" target="_blank" class="body-link"><code>CollectionSortOrder</code></a>, available in API version <code>2026-07</code> and higher. </p>
<p>Learn more about collection sorting options in the <a href="https://help.shopify.com/en/manual/products/collections/collection-layout" target="_blank" class="body-link">Shopify Help Center</a>.</p>
</div> ]]></description>
    <pubDate>Wed, 15 Apr 2026 16:00:00 +0000</pubDate>
    <atom:published>2026-04-15T16:00:00.000Z</atom:published>
    <atom:updated>2026-04-20T20:31:21.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <category>Admin GraphQL API</category>
    <category>2026-07</category>
    <link>https://shopify.dev/changelog/added-mostrelevant-value-for-collectionsortorder</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/added-mostrelevant-value-for-collectionsortorder</guid>
  </item>
  <item>
    <title>`ActionBar` removed on mobile: `TitleBar` primary action now renders as an icon button</title>
    <description><![CDATA[ <div class=""><h2>Mobile primary action now renders as an icon in the title bar</h2>
<p>On mobile, the primary and secondary actions defined on your <a href="https://shopify.dev/docs/api/app-bridge-library/reference/title-bar" target="_blank" class="body-link"><code>TitleBar</code></a> are changing how they render:</p>
<ul>
<li>The primary action now displays as an icon-only button in the mobile header, rather than in a bottom bar with icon and text.</li>
<li>Secondary actions now appear in the overflow menu, creating a more consistent mobile interface.</li>
<li>If you don't pass an <code>icon</code> property with your primary action, it defaults to a <strong>+</strong> (plus) icon.</li>
</ul>
<h2>Who's affected</h2>
<p>All embedded apps that define a primary action or secondary actions on their <a href="https://shopify.dev/docs/api/app-bridge-library/reference/title-bar" target="_blank" class="body-link"><code>TitleBar</code></a>.</p>
<h2>When the changes go into effect</h2>
<p>Changes go live to all affected apps on April 15th, 2026.</p>
<h2>What you should do</h2>
<p>If the default <strong>+</strong> icon fits your use case, no changes are needed. Otherwise:</p>
<ul>
<li>Pass an explicit <code>icon</code> with the primary action on your <a href="https://shopify.dev/docs/api/app-bridge-library/reference/title-bar" target="_blank" class="body-link"><code>TitleBar</code></a> to ensure the most contextually appropriate icon displays on mobile.</li>
</ul>
</div> ]]></description>
    <pubDate>Wed, 15 Apr 2026 16:00:00 +0000</pubDate>
    <atom:published>2026-04-15T16:00:00.000Z</atom:published>
    <atom:updated>2026-04-15T16:00:00.000Z</atom:updated>
    <category>Action Required</category>
    <category>API</category>
    <category>New</category>
    <category>App Bridge</category>
    <link>https://shopify.dev/changelog/primary-action-icon-replaces-actionbar-on-mobile</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/primary-action-icon-replaces-actionbar-on-mobile</guid>
  </item>
  <item>
    <title>`LineItem.weight` field now available in public Admin API</title>
    <description><![CDATA[ <div class=""><p>Starting in version <code>2026-07</code> of the <a href="https://shopify.dev/docs/api/admin-graphql/2026-07/objects/LineItem#field-LineItem.fields.weight" target="_blank" class="body-link">GraphQL Admin API</a>, you can query the <code>weight</code> field on the <code>LineItem</code> type in the GraphQL Admin API. This field returns a <code>Weight</code> object with <code>value</code> and <code>unit</code>, making it easy to access line item weights without converting from the REST API's <code>grams</code> field.</p>
</div> ]]></description>
    <pubDate>Wed, 15 Apr 2026 16:00:00 +0000</pubDate>
    <atom:published>2026-04-15T16:00:00.000Z</atom:published>
    <atom:updated>2026-04-15T16:00:00.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <category>Admin GraphQL API</category>
    <category>2026-07</category>
    <link>https://shopify.dev/changelog/lineitem-weight-field-now-available-in-public-admin-api</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/lineitem-weight-field-now-available-in-public-admin-api</guid>
  </item>
  <item>
    <title>New CSS variable for mobile safe area insets</title>
    <description><![CDATA[ <div class=""><h2>New CSS Variable for Mobile Safe Area Insets</h2>
<p>A new CSS custom property, <code>--shopify-safe-area-inset-bottom</code>, is now available for embedded apps running on Shopify Mobile. This property provides the exact pixel value of host UI overlays, such as the floating bottom navigation bar, to prevent apps from placing fixed-position content over these overlays.</p>
<ul>
<li>The <code>var(--shopify-safe-area-inset-bottom)</code> is automatically set by App Bridge. It defaults to <code>0px</code> when no overlay is present, and adjusts to the height of the overlay in CSS pixels when the mobile floating bottom bar is active.</li>
<li>This variable automatically adds bottom padding to the <code>&lt;body&gt;</code>, ensuring most apps function correctly without content being obscured by the floating bar.</li>
<li>If your app includes custom fixed-bottom elements, such as sticky footers or floating action buttons (FABs), incorporate this variable into your styles:</li>
</ul>
<pre><code class="language-css">  .my-floating-button {
    bottom: calc(16px + var(--shopify-safe-area-inset-bottom, 0px));
  }
</code></pre>
<h2>Who's Affected</h2>
<p>All embedded apps running on Shopify Mobile that utilize fixed or sticky elements at the bottom of the viewport.</p>
<h2>When the Changes Take Effect</h2>
<p>These changes will be implemented for all affected apps on April 15th, 2026.</p>
<h2>What You Should Do</h2>
<p>For most apps, no action is required as bottom padding is automatically applied. However, if your app has custom fixed-bottom UI elements, use <code>var(--shopify-safe-area-inset-bottom, 0px)</code> in your CSS to ensure these elements are positioned above the native floating bottom bar.</p>
<h2>References</h2>
<ul>
<li><a href="https://shopify.dev/docs/api/app-home/apis/authentication-and-data/environment-api" target="_blank" class="body-link">https://shopify.dev/docs/api/app-home/apis/authentication-and-data/environment-api</a></li>
</ul>
</div> ]]></description>
    <pubDate>Mon, 13 Apr 2026 19:00:00 +0000</pubDate>
    <atom:published>2026-04-13T19:00:00.000Z</atom:published>
    <atom:updated>2026-04-13T19:00:00.000Z</atom:updated>
    <category>Action Required</category>
    <category>API</category>
    <category>New</category>
    <category>App Bridge</category>
    <link>https://shopify.dev/changelog/new-css-variable-for-mobile-safe-area-insets</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/new-css-variable-for-mobile-safe-area-insets</guid>
  </item>
  <item>
    <title>Automated testing for Shopify UI extensions with @shopify/ui-extensions-tester</title>
    <description><![CDATA[ <div class=""><p>As of API version 2026-04, Shopify provides an official testing library for UI extensions. <code>@shopify/ui-extensions-tester</code> lets you write unit tests for extensions on any surface — Checkout, Admin, Customer Accounts, and POS — without a running Shopify host.</p>
<h3>What it does</h3>
<p>The library provides strongly typed mocks of the extension API, so you can render extensions in isolation, simulate user interactions, and verify behaviour against public APIs with full type safety.</p>
<h3>Key capabilities</h3>
<ul>
<li><strong>Render and query</strong>: Render your extension in a standard DOM environment and query the output using standard testing patterns.</li>
<li><strong>Type-safe mocks</strong>: The mocked <code>shopify</code> global uses the same types as the real API, catching incorrect API usage at test time.</li>
<li><strong>Surface-specific defaults</strong>: Sensible mock defaults for each target surface (Checkout, Admin, Customer Accounts, POS) so tests work out of the box.</li>
<li><strong>Event simulation</strong>: Trigger user interactions and test async state changes with <code>dispatchEvent()</code> or <code>@testing-library/preact</code>.</li>
<li><strong>AI-agent friendly</strong>: Strongly typed mocks and predictable test patterns make the library well-suited for AI-assisted test-driven development.</li>
</ul>
<h3>Getting started</h3>
<p>Read <a href="https://github.com/Shopify/ui-extensions/blob/2026-04/packages/ui-extensions-tester/README.md" target="_blank" class="body-link">documentation</a> to learn more. 
Get started with <a href="https://github.com/Shopify/ui-extensions/tree/2026-04/examples/testing" target="_blank" class="body-link">example test suites</a> for every surface.</p>
</div> ]]></description>
    <pubDate>Mon, 13 Apr 2026 16:00:00 +0000</pubDate>
    <atom:published>2026-04-13T16:00:00.000Z</atom:published>
    <atom:updated>2026-04-14T10:52:01.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <category>Admin Extensions</category>
    <category>Checkout UI</category>
    <category>Customer Accounts</category>
    <category>POS Extensions</category>
    <category>2026-04</category>
    <link>https://shopify.dev/changelog/automated-testing-for-shopify-ui-extensions-with-shopify-ui-extensions-tester</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/automated-testing-for-shopify-ui-extensions-with-shopify-ui-extensions-tester</guid>
  </item>
  <item>
    <title> DraftOrderLineItem.grams field removed in 2026-07</title>
    <description><![CDATA[ <div class=""><h2>What's changing</h2>
<p>We are removing the grams field from the <a href="https://shopify.dev/docs/api/admin-graphql/latest/objects/DraftOrderLineItem" target="_blank" class="body-link">DraftOrderLineItem</a> object in the Admin GraphQL API, starting with version 2026-07. This field was deprecated over 8 years ago. 	After the 2026-04 API version becomes unsupported, any queries referencing DraftOrderLineItem.grams will return an error.</p>
<h2>What you need to do</h2>
<p>Replace any usage of grams with the weight field on <a href="https://shopify.dev/docs/api/admin-graphql/latest/objects/DraftOrderLineItem" target="_blank" class="body-link">DraftOrderLineItem</a>. The weight field returns both a value and a unit, giving you more flexibility than the old grams integer.</p>
<p>Before (deprecated):</p>
<pre><code class="language-graphql">query {
    draftOrder(id: &quot;gid://shopify/DraftOrder/1&quot;) {
      lineItems(first: 5) {
        nodes {
          grams
        }
      }
    }
  }
</code></pre>
<p>After:</p>
<pre><code class="language-graphql">query {
    draftOrder(id: &quot;gid://shopify/DraftOrder/1&quot;) {
      lineItems(first: 5) {
        nodes {
          weight {
            value
            unit
          }
        }
      }
    }
  }
</code></pre>
<h2>Why we made this change</h2>
<p>The grams field only supported one unit and could overflow for large weights. The weight field uses a WeightInput with both value and unit, which is more flexible and consistent with how weight works elsewhere in the platform.
	</p>
<h2>Need help?</h2>
<p>For more details, see the <a href="https://shopify.dev/docs/api/admin-graphql/latest/objects/DraftOrderLineItem" target="_blank" class="body-link">DraftOrderLineItem</a> reference docs. If you have questions about this change, please reach out through the <a href="https://community.shopify.com/?utm_source=changelog&utm_medium=changelog&utm_campaign=draftorderlineitem_grams_deprecation&utm_content=partner_community_link" target="_blank" class="body-link">Shopify Partners community</a>.</p>
</div> ]]></description>
    <pubDate>Mon, 13 Apr 2026 14:00:00 +0000</pubDate>
    <atom:published>2026-04-13T14:00:00.000Z</atom:published>
    <atom:updated>2026-07-09T22:36:07.000Z</atom:updated>
    <category>Action Required</category>
    <category>API</category>
    <category>Breaking API Change</category>
    <category>2026-07</category>
    <link>https://shopify.dev/changelog/draftorderlineitemgrams-field-removed-in-2026-07</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/draftorderlineitemgrams-field-removed-in-2026-07</guid>
  </item>
  <item>
    <title>New discount fields in the Storefront API's cart types</title>
    <description><![CDATA[ <div class=""><p>As of API version 2026-07, several changes have been introduced to the discount fields and amounts in the <a href="https://shopify.dev/docs/api/storefront/latest" target="_blank" class="body-link">Storefront API</a>.</p>
<h2>What's changed</h2>
<p><strong>Deprecated Fields</strong>:</p>
<ul>
<li>The <a href="https://shopify.dev/docs/api/storefront/2026-07/objects/Cart#field-discountAllocations" target="_blank" class="body-link"><code>cart.discountAllocations</code></a> field is deprecated. Use <code>cart.lines[].discountAllocations(lineLevelOnly: false)</code> and <code>cart.deliveryGroups[].discountAllocations</code> instead.</li>
<li>The <a href="https://shopify.dev/docs/api/storefront/2026-07/interfaces/CartDiscountAllocation#field-discountApplication" target="_blank" class="body-link"><code>cartDiscountAllocation.discountApplication</code></a> field is deprecated. Use <code>sourceDiscountApplication</code> instead. Note: the <code>value</code> field on <code>discountApplication</code> incorrectly returns the per-line allocated amount rather than the configured discount amount (for example, a $10 fixed discount allocated as $4 to one line shows <code>value: $4</code>). The new <code>sourceDiscountApplication</code> field returns the correct value.</li>
</ul>
<p><strong>New Fields</strong>: </p>
<ul>
<li><a href="https://shopify.dev/docs/api/storefront/2026-07/objects/Cart#field-discountApplications" target="_blank" class="body-link"><code>cart.discountApplications</code></a>: Lists all discounts (for example, product, shipping, and order) currently applied to the cart.</li>
<li><a href="https://shopify.dev/docs/api/storefront/2026-07/interfaces/CartDiscountAllocation#field-sourceDiscountApplication" target="_blank" class="body-link"><code>cartDiscountAllocation.sourceDiscountApplication</code></a>: Returns the discount application with the correct configured discount value and concrete type information. For example, a $10 fixed discount will show <code>value: $10</code> regardless of how it's allocated across lines. Access type-specific fields using GraphQL fragments, for example <code>sourceDiscountApplication { … on CartCodeDiscountApplication { code } }</code>.</li>
<li><a href="https://shopify.dev/docs/api/storefront/2026-07/interfaces/BaseCartDiscountApplication#field-totalAllocatedAmount" target="_blank" class="body-link"><code>baseCartDiscountApplication.totalAllocatedAmount</code></a>: Shows the total discount amount allocated across the entire cart. For instance, if a 10% discount splits as $4 on line A and $6 on line B, both lines will show <code>totalAllocatedAmount: $10</code>.</li>
<li><a href="https://shopify.dev/docs/api/storefront/2026-07/objects/CartDeliveryGroup#field-discountAllocations" target="_blank" class="body-link"><code>cart.deliveryGroups[].discountAllocations</code></a>: Displays the discounts allocated to the delivery group.</li>
</ul>
<p><strong>New Argument</strong>:</p>
<ul>
<li><a href="https://shopify.dev/docs/api/storefront/2026-07/objects/CartLine#field-discountAllocations" target="_blank" class="body-link"><code>cart.lines[].discountAllocations(lineLevelOnly: Boolean)</code></a>: The <code>lineLevelOnly</code> argument lets you request either only product-level discounts or all discounts allocated to the cart line. It defaults to <code>true</code> for backward compatibility.</li>
</ul>
<h2>What you need to do</h2>
<ul>
<li>Update queries to use <code>cart.discountApplications</code> instead of <code>cart.discountAllocations</code> for reading all discount applications on a cart.</li>
<li>Replace <code>cartDiscountAllocation.discountApplication</code> with <code>sourceDiscountApplication</code> for accurate discount values and type-specific fields.</li>
<li>Move product allocation queries to <code>cart.lines[].discountAllocations(lineLevelOnly: false)</code>.</li>
<li>Move shipping allocation queries to <code>cart.deliveryGroups[].discountAllocations</code>.</li>
<li>Test your discount calculations with percentage, fixed amount, and free shipping discounts.</li>
</ul>
</div> ]]></description>
    <pubDate>Fri, 10 Apr 2026 19:00:00 +0000</pubDate>
    <atom:published>2026-04-10T19:00:00.000Z</atom:published>
    <atom:updated>2026-04-10T19:00:00.000Z</atom:updated>
    <category>API</category>
    <category>Deprecation announcement</category>
    <category>Storefront API</category>
    <category>2026-07</category>
    <link>https://shopify.dev/changelog/new-discount-fields-in-the-storefront-cart-graphql-api</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/new-discount-fields-in-the-storefront-cart-graphql-api</guid>
  </item>
  <item>
    <title>Introducing the Shopify AI Toolkit</title>
    <description><![CDATA[ <div class=""><p>In order for AI coding agents to be useful additions to development workflows, they need to have the right context. When you're building on Shopify,  a small platform detail can change the right implementation: the API surface you choose, the fields available in a schema, the extension APIs you import, or the validation steps you need before shipping.</p>
<p>The Shopify AI Toolkit is now available to help bridge that gap. It gives supported AI coding tools access to Shopify developer resources, API schemas, validation, and Shopify CLI workflows, so agents can spend less time rediscovering Shopify context and more time helping with the task in front of them.</p>
<h2>What changes with the toolkit</h2>
<p>The Toolkit is designed for the moments where generic AI assistance usually needs extra correction. If you're designing an Admin GraphQL operation, your agent can work from Shopify's API schemas instead of guessing at fields or object relationships. If you're editing Liquid or UI extension code, it can validate the generated work against Shopify-specific expectations. If a task needs store context, your agent can use Shopify CLI’s <code>store execute</code> command when you choose to run it.</p>
<p>All this harness brings your agent’s work closer to the right answer, with access to the same Shopify-specific context you would otherwise need to provide manually.</p>
<h2>Example: extension migrations</h2>
<p>Extension migrations are a good example of where this helps. Checkout and customer account UI extensions on API versions before <code>2025-10</code> need to adopt Polaris web components when upgrading to newer API versions. That kind of migration involves repetitive, detail-heavy work:</p>
<ul>
<li>Updating the extension API version in <code>shopify.extension.toml</code>.  </li>
<li>Converting React-based extension code to Preact where required.  </li>
<li>Replacing legacy components with Polaris web components.  </li>
<li>Updating extension APIs and target-specific imports.  </li>
<li>Checking the migration guide for required steps.  </li>
<li>Running and testing the migrated extension locally.</li>
</ul>
<p>With the Toolkit installed, you can ask your coding agent to start that work from Shopify's migration guidance:</p>
<pre><code>Migrate the extensions/my-checkout-extension extension to API version 2026-04.
</code></pre>
<p>The Toolkit doesn't remove the need to test the result, review the diff, or validate behavior in your app. It helps automate the repetitive parts of the migration so you can spend more time on the decisions and checks that still need your experience as a developer.</p>
<h2>Get started</h2>
<p>Install the Shopify AI Toolkit with the plugin for your AI tool. The Toolkit supports Claude Code, Codex, Antigravity CLI, Cursor, Hermes through the plugin, and Visual Studio Code. For setup instructions, refer to the <a href="https://shopify.dev/docs/apps/build/ai-toolkit" target="_blank" class="body-link">Shopify AI Toolkit documentation</a>.</p>
<p>After installing, try it on a real Shopify workflow: scaffold an app, explore the right API for a use case, review an app against Shopify App Store requirements, or migrate a checkout or customer account UI extension.</p>
<h2>Related docs</h2>
<ul>
<li><a href="https://shopify.dev/docs/apps/build/ai-toolkit" target="_blank" class="body-link">Shopify AI Toolkit</a>  </li>
<li><a href="https://shopify.dev/docs/apps/build/checkout/migrate-to-web-components#migrate-using-ai" target="_blank" class="body-link">Upgrade checkout UI extensions to the latest API version and Polaris web components</a>  </li>
<li><a href="https://shopify.dev/docs/apps/build/customer-accounts/migrate-to-web-components#migrate-using-ai" target="_blank" class="body-link">Upgrade customer account UI extensions to the latest API version and Polaris web components</a>  </li>
<li><a href="https://shopify.dev/docs/api/polaris/using-mcp" target="_blank" class="body-link">Use Polaris with the Shopify dev MCP server</a></li>
</ul>
</div> ]]></description>
    <pubDate>Thu, 09 Apr 2026 19:45:00 +0000</pubDate>
    <atom:published>2026-04-09T19:45:00.000Z</atom:published>
    <atom:updated>2026-07-10T19:14:01.000Z</atom:updated>
    <category>AI Toolkit</category>
    <category>New</category>
    <link>https://shopify.dev/changelog/shopify-ai-toolkit-connect-your-ai-tools-to-the-shopify-platform</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/shopify-ai-toolkit-connect-your-ai-tools-to-the-shopify-platform</guid>
  </item>
  <item>
    <title>Hydrogen April 2026 release</title>
    <description><![CDATA[ <div class=""><p>The Hydrogen April 2026 release (v2026.4.0) is out. This release updates the Storefront API and Customer Account API to 2026-04 and includes breaking changes to consent handling and the API proxy.</p>
<ul>
<li>Updated Storefront API and Customer Account API to 2026-04 (<a href="https://github.com/Shopify/hydrogen/pull/3651" target="_blank" class="body-link">#3651</a>)</li>
<li><strong>Breaking:</strong> The Storefront API proxy is now always enabled. The <code>proxyStandardRoutes</code> option has been removed from <code>createRequestHandler</code>. If your load context does not include a <code>storefront</code> instance, the request handler will throw an error. (<a href="https://github.com/Shopify/hydrogen/pull/3649" target="_blank" class="body-link">#3649</a>)</li>
<li><strong>Breaking:</strong> Backend consent mode is now on by default, replacing the legacy <code>_tracking_consent</code> JS cookie with server-set cookies via the Storefront API proxy. (<a href="https://github.com/Shopify/hydrogen/pull/3649" target="_blank" class="body-link">#3649</a>)</li>
</ul>
<p>Check out the <a href="https://github.com/Shopify/hydrogen/releases/tag/%40shopify%2Fhydrogen%402026.4.0" target="_blank" class="body-link">full release notes</a> for more details. Review the <a href="https://shopify.dev/docs/api/release-notes/2026-04" target="_blank" class="body-link">Storefront API 2026-04 changelog</a> and <a href="https://shopify.dev/docs/api/customer/changelog" target="_blank" class="body-link">Customer Account API 2026-04 changelog</a> for other changes that may affect your storefront. And please drop your comments, feedback, and suggestions in <a href="https://github.com/Shopify/hydrogen/discussions" target="_blank" class="body-link">GitHub Discussions</a>.</p>
</div> ]]></description>
    <pubDate>Thu, 09 Apr 2026 16:00:00 +0000</pubDate>
    <atom:published>2026-04-09T16:00:00.000Z</atom:published>
    <atom:updated>2026-04-16T22:31:02.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <category>Hydrogen</category>
    <link>https://shopify.dev/changelog/hydrogen-april-2026-release</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/hydrogen-april-2026-release</guid>
  </item>
  <item>
    <title>Shopify Scripts will be deprecated on June 30, 2026</title>
    <description><![CDATA[ <div class=""><p>We are enhancing <a href="https://shopify.dev/docs/apps/build/checkout#shopify-functions" target="_blank" class="body-link">Shopify Functions</a> with new capabilities for discounts, shipping, and payments. These improvements aim to replace the functionalities you previously achieved using Shopify Scripts, allowing you to build custom logic tailored to your unique business needs.</p>
<p>To assist with your migration planning, we recommend using the <a href="https://help.shopify.com/en/manual/checkout-settings/script-editor/transitioning-to-functions#functions-migrate" target="_blank" class="body-link">Shopify Scripts customizations report</a>. This tool will help you identify which of your current customizations can be transitioned to Shopify Functions or public apps.</p>
<p>Here are the key dates to keep in mind as we approach the deprecation of Shopify Scripts:</p>
<ul>
<li><strong>April 15, 2026</strong>—Editing and publishing new Shopify Scripts will no longer be possible.</li>
<li><strong>June 30, 2026</strong>—All Shopify Scripts will cease to execute entirely.</li>
</ul>
<p>We strongly encourage you to begin your migration as soon as possible.</p>
<p>For more information on migrating from Shopify Scripts to Shopify Functions, please visit the <a href="https://help.shopify.com/en/manual/checkout-settings/script-editor/transitioning-to-functions" target="_blank" class="body-link">Shopify Help Center</a>.</p>
</div> ]]></description>
    <pubDate>Thu, 09 Apr 2026 16:00:00 +0000</pubDate>
    <atom:published>2026-04-09T16:00:00.000Z</atom:published>
    <atom:updated>2026-04-13T18:09:44.000Z</atom:updated>
    <category>API</category>
    <category>Deprecation announcement</category>
    <category>Functions</category>
    <category>2026-04</category>
    <link>https://shopify.dev/changelog/shopify-scripts-will-be-deprecated-on-june-30-2026</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/shopify-scripts-will-be-deprecated-on-june-30-2026</guid>
  </item>
  <item>
    <title>Replacing or deleting a Shopify-hosted file no longer purges its CDN URL</title>
    <description><![CDATA[ <div class=""><p>As of April 7, 2026, when you replace or delete a file in the Shopify admin, Shopify will no longer proactively purge the file's URL on cdn.shopify.com/.... The previously cached content will continue to be served until the URL's TTL (Time to Live) expires. This change aims to reduce CDN purge volume and improve consistency across our edge providers.</p>
<p>To ensure your customers receive updated content after a file replacement, use Shopify's URL helpers to render file references. This ensures the current versioned URL (?v=...) is always emitted:</p>
<ul>
<li><strong>In themes:</strong> Use the Liquid filters <a href="https://shopify.dev/docs/api/liquid/filters/file_url" target="_blank" class="body-link">file_url</a>, <a href="https://shopify.dev/docs/api/liquid/filters/image_url" target="_blank" class="body-link">image_url</a>, and <a href="https://shopify.dev/docs/api/liquid/filters/asset_url" target="_blank" class="body-link">asset_url</a>.</li>
<li><strong>In products:</strong> Insert images and videos via the native <a href="https://shopify.dev/docs/apps/build/online-store/product-media" target="_blank" class="body-link">Media uploader</a> rather than pasting <code>&lt;img src=&quot;...&quot;&gt;</code> into descriptions.</li>
<li><strong>In apps and external integrations:</strong> Fetch file URLs at request time from the <a href="https://shopify.dev/docs/api/admin-graphql/latest/queries/files" target="_blank" class="body-link">Admin GraphQL API</a> or <a href="https://shopify.dev/docs/api/storefront/latest/interfaces/Media" target="_blank" class="body-link">Storefront API</a> instead of caching them.</li>
</ul>
<p>Hardcoded cdn.shopify.com/... URLs in product descriptions, blog posts, theme code, or printed materials will continue to return the original content after a file replacement. We recommend migrating to one of the dynamic patterns above to ensure updated content is served.</p>
</div> ]]></description>
    <pubDate>Tue, 07 Apr 2026 04:00:00 +0000</pubDate>
    <atom:published>2026-04-07T04:00:00.000Z</atom:published>
    <atom:updated>2026-05-13T21:17:03.000Z</atom:updated>
    <category>Action Required</category>
    <category>Platform</category>
    <category>Update</category>
    <link>https://shopify.dev/changelog/replacing-or-deleting-a-shopify-hosted-file-no-longer-purges-its-cdn-url</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/replacing-or-deleting-a-shopify-hosted-file-no-longer-purges-its-cdn-url</guid>
  </item>
  <item>
    <title>New retail cash management capabilities</title>
    <description><![CDATA[ <div class=""><p>We've rebuilt cash management on Shopify POS from the ground up. The new Admin GraphQL APIs and POS UI extension targets open up cash management data and controls to app developers, enabling custom cash management workflows that were previously impossible to build on Shopify POS.</p>
<h2>What's new</h2>
<h3>Cash Drawers</h3>
<p><a href="https://shopify.dev/docs/api/admin-graphql/2026-04/objects/CashDrawer" target="_blank" class="body-link"><code>CashDrawer</code></a> is a new resource that decouples cash management from individual POS devices. A cash drawer represents a physical cash storage unit at a location. Multiple devices can connect to a single drawer, enabling flexible store setups.</p>
<p>| Resource | Description |
| </p>
</div> ]]></description>
    <pubDate>Thu, 02 Apr 2026 13:00:00 +0000</pubDate>
    <atom:published>2026-04-02T13:00:00.000Z</atom:published>
    <atom:updated>2026-04-02T13:00:00.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <category>Admin GraphQL API</category>
    <category>POS Extensions</category>
    <category>2026-04</category>
    <link>https://shopify.dev/changelog/new-retail-cash-management-capabilities</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/new-retail-cash-management-capabilities</guid>
  </item>
  <item>
    <title>Add Prerequisites to Product Discount Functions</title>
    <description><![CDATA[ <div class=""><p>Discount functions now support prerequisites for product discount candidates, allowing you to define the &quot;Buy X&quot; portion of a Buy X, Get Y (BXGY) discount. In a BXGY discount, customers must purchase a specified quantity of one product (Buy X) to receive a discount on another product (Get Y).</p>
<p><strong>What's New:</strong></p>
<ul>
<li>A <code>prerequisites</code> field has been added to product discount candidates.</li>
<li>Each prerequisite is defined as a <code>cartLinePrerequisite</code>, which includes:<ul>
<li><code>id</code>: The identifier for the cart line used as the prerequisite.</li>
<li><code>quantity</code>: The number of items from that cart line required to qualify for the discount.</li>
</ul>
</li>
</ul>
<p>For more detailed information, please visit the <a href="https://shopify.dev/docs/api/functions/latest/discount" target="_blank" class="body-link">Discount Functions documentation</a>.</p>
</div> ]]></description>
    <pubDate>Wed, 01 Apr 2026 22:00:00 +0000</pubDate>
    <atom:published>2026-04-01T22:00:00.000Z</atom:published>
    <atom:updated>2026-04-01T22:00:00.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <category>Functions</category>
    <category>2026-04</category>
    <link>https://shopify.dev/changelog/add-prerequisites-to-product-discount-functions</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/add-prerequisites-to-product-discount-functions</guid>
  </item>
  <item>
    <title>Add Tags to Discounts</title>
    <description><![CDATA[ <div class=""><p>Starting in API version 2026-04, discounts support tags allowing you to efficiently label, group, and organize your discounts.</p>
<p><strong>What's new:</strong></p>
<ul>
<li>The <code>tags</code> field has been added to all discount types</li>
<li>Tags can be added, updated, and removed via the Admin API</li>
</ul>
<p>For more information, visit the <a href="https://shopify.dev/docs/api/admin-graphql/2026-04" target="_blank" class="body-link">Admin API documentation</a></p>
</div> ]]></description>
    <pubDate>Wed, 01 Apr 2026 22:00:00 +0000</pubDate>
    <atom:published>2026-04-01T22:00:00.000Z</atom:published>
    <atom:updated>2026-04-01T22:00:00.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <category>Admin GraphQL API</category>
    <category>2026-04</category>
    <link>https://shopify.dev/changelog/add-tags-to-discounts</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/add-tags-to-discounts</guid>
  </item>
  <item>
    <title>`expiresIn` field added to `DelegateAccessToken` type</title>
    <description><![CDATA[ <div class=""><p>We have introduced an <code>expiresIn</code> field to the <code>DelegateAccessToken</code> type, which is returned by the <a href="https://shopify.dev/docs/api/admin-graphql/latest/mutations/delegateAccessTokenCreate" target="_blank" class="body-link"><code>delegateAccessTokenCreate</code></a> mutation. This addition allows app developers using delegate tokens to know precisely when their tokens will expire. The <code>expiresIn</code> field provides the number of seconds remaining until the token expires, aligning with the data available through the REST Admin API's delegate endpoint.</p>
<p>This feature is particularly beneficial when the <code>expiresIn</code> input is not specified, causing the delegate token to inherit the parent token's Time to Live (TTL). Previously, developers had no means to ascertain the expiration time of such tokens. </p>
<p>This update is available in GraphQL Admin API version <strong>2026-04</strong> and later.</p>
</div> ]]></description>
    <pubDate>Wed, 01 Apr 2026 16:00:00 +0000</pubDate>
    <atom:published>2026-04-01T16:00:00.000Z</atom:published>
    <atom:updated>2026-07-09T20:34:39.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <category>Admin GraphQL API</category>
    <category>2026-04</category>
    <link>https://shopify.dev/changelog/delegateaccesstokencreate-mutation-now-returns-expiresin</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/delegateaccesstokencreate-mutation-now-returns-expiresin</guid>
  </item>
  <item>
    <title>Adding access field to StandardMetaobjectDefinitionTemplate</title>
    <description><![CDATA[ <div class=""><p>We are introducing a new <code>access</code> field to the <a href="https://shopify.dev/docs/api/admin-graphql/latest/objects/StandardMetaobjectDefinitionTemplate" target="_blank" class="body-link"><code>StandardMetaobjectDefinitionTemplate</code></a>. This field will display the template's access rules, helping you determine if a specific template is configured for access via the Storefront API. By understanding these access rules, developers can plan their API interactions more effectively, ensuring seamless integration with the Storefront.</p>
<p>The <code>StandardMetaobjectDefinitionTemplate</code> is a component that defines the structure and behavior of metaobjects within Shopify. With the new <code>access</code> field, you can proactively verify access configurations, optimizing your development workflow and enhancing the user experience.</p>
</div> ]]></description>
    <pubDate>Wed, 01 Apr 2026 16:00:00 +0000</pubDate>
    <atom:published>2026-04-01T16:00:00.000Z</atom:published>
    <atom:updated>2026-04-01T16:00:00.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <category>Admin GraphQL API</category>
    <category>2026-07</category>
    <link>https://shopify.dev/changelog/adding-access-field-to-standardmetaobjectdefinitiontemplate</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/adding-access-field-to-standardmetaobjectdefinitiontemplate</guid>
  </item>
  <item>
    <title>App-owned metaobjects can be used without access scopes</title>
    <description><![CDATA[ <div class=""><p>App-owned metaobjects, identified by types such as <code>$app:example</code>, including those created using <a href="https://shopify.dev/docs/apps/build/metaobjects#step-1-create-a-metaobject-definition" target="_blank" class="body-link">declarative metaobject definitions</a>, can now be utilized by their owning app without requiring any access scopes. This change simplifies the process for developers by eliminating the need to request additional access scopes, thereby reducing potential merchant friction.</p>
<p>If you are considering using declarative metaobjects in your app, you can now proceed without worrying about additional access scope requests. Ensure you are using Admin API version 2026-04 or later to read or write app-owned metaobjects without the need for additional access scopes.</p>
<p>Working with <a href="https://shopify.dev/docs/apps/build/metaobjects#metaobject-ownership" target="_blank" class="body-link">merchant-owned metaobject types</a> still requires specific access scopes, such as <code>read_metaobjects</code> or <code>write_metaobject_definitions</code>, to be granted.</p>
</div> ]]></description>
    <pubDate>Wed, 01 Apr 2026 16:00:00 +0000</pubDate>
    <atom:published>2026-04-01T16:00:00.000Z</atom:published>
    <atom:updated>2026-04-01T16:00:00.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <category>Admin GraphQL API</category>
    <category>2026-04</category>
    <link>https://shopify.dev/changelog/metaobject-scopes-not-required-for-app-metaobjects</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/metaobject-scopes-not-required-for-app-metaobjects</guid>
  </item>
  <item>
    <title>Removing outdated Polaris reference docs</title>
    <description><![CDATA[ <div class=""><p>Polaris reference docs now follow the same <a href="https://shopify.dev/docs/api/usage/versioning" target="_blank" class="body-link">versioning policy</a> as Shopify's GraphQL APIs: Each stable version is supported for a minimum of 12 months. Older versions continue to work, they just won’t have dedicated docs on Shopify.dev. Shopify CLI already prevents deploys targeting API versions older than 12 months, so we recommend keeping your extensions on a supported version.</p>
<p>Starting with the 2026-04 release, we'll only publish docs for the last four stable versions of these reference docs:</p>
<ul>
<li><a href="https://shopify.dev/docs/api/admin-extensions/latest" target="_blank" class="body-link">Admin UI extensions</a></li>
<li><a href="https://shopify.dev/docs/api/checkout-ui-extensions/latest" target="_blank" class="body-link">Checkout UI extensions</a></li>
<li><a href="https://shopify.dev/docs/api/customer-account-ui-extensions/latest" target="_blank" class="body-link">Customer account UI extensions</a></li>
<li><a href="https://shopify.dev/docs/api/pos-ui-extensions/latest" target="_blank" class="body-link">POS UI extensions</a></li>
</ul>
</div> ]]></description>
    <pubDate>Wed, 01 Apr 2026 16:00:00 +0000</pubDate>
    <atom:published>2026-04-01T16:00:00.000Z</atom:published>
    <atom:updated>2026-04-01T16:00:00.000Z</atom:updated>
    <category>API</category>
    <category>Update</category>
    <category>Admin Extensions</category>
    <category>Checkout UI</category>
    <category>Customer Accounts</category>
    <category>POS Extensions</category>
    <category>2026-04</category>
    <link>https://shopify.dev/changelog/removing-outdated-polaris-reference-docs</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/removing-outdated-polaris-reference-docs</guid>
  </item>
  <item>
    <title>Metaobject access in Shopify Functions</title>
    <description><![CDATA[ <div class=""><p>As of GraphQL API version 2026-04, all Shopify Functions can access app-owned metaobject entries.</p>
<p>Metaobjects are now available for every function target. This feature enables you to query additional structured data present in metaobjects, such as tiered pricing and bundles. To query a metaobject entry, specify a handle or ID in your input query file. Note that only app-owned metaobject types, identified by the <code>$app</code> reserved prefix, are accessible to functions.</p>
<p>For details look under the Shop field for any of the 2026-04 Functions, like the <a href="https://shopify.dev/docs/api/functions/latest/cart-transform#Input.fields.shop.metaobject" target="_blank" class="body-link">metaobject input object</a> in Cart Transform. Learn more about <a href="https://shopify.dev/docs/apps/build/metaobjects#metaobject-ownership" target="_blank" class="body-link">metaobject ownership</a>.</p>
</div> ]]></description>
    <pubDate>Wed, 01 Apr 2026 16:00:00 +0000</pubDate>
    <atom:published>2026-04-01T16:00:00.000Z</atom:published>
    <atom:updated>2026-04-01T16:00:00.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <category>Functions</category>
    <category>2026-04</category>
    <link>https://shopify.dev/changelog/metaobject-access-in-functions</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/metaobject-access-in-functions</guid>
  </item>
  <item>
    <title>Metafield translations now available via GraphQL Admin API</title>
    <description><![CDATA[ <div class=""><p>The <code>Metafield</code> type now includes a <code>translations</code> field, enabling you to query localized metafield values directly via the GraphQL Admin API. This enhancement allows you to access translations for metafields associated with any resource, including products, collections, customers, orders, locations, and more.</p>
<h2>Querying translations</h2>
<p>To query translations for a resource's metafields, including their localized values, see the <a href="https://shopify.dev/docs/api/admin-graphql/2026-04/queries/product?example=get-translations-for-a-product-metafield" target="_blank" class="body-link">Get translations for a product metafield</a> example.</p>
<h2>Registering a translation</h2>
<p>To register a translation, use the <code>translationsRegister</code> mutation with the metafield's resource ID and a content digest. The <code>compareDigest</code> ensures that translations remain synchronized with the original value. You can obtain this digest when creating or querying a metafield.</p>
<p>See the <a href="https://shopify.dev/docs/api/admin-graphql/2026-04/mutations/translationsRegister?example=register-a-french-translation-for-a-metafield-value" target="_blank" class="body-link">Register a French translation for a metafield value</a> example for the full workflow.</p>
<p>Translation is supported for text-based metafield types, including <code>single_line_text_field</code>, <code>multi_line_text_field</code>, <code>rich_text_field</code>, and <code>html</code>. Ensure that the target locale is <a href="https://shopify.dev/docs/api/admin-graphql/latest/mutations/shopLocaleEnable" target="_blank" class="body-link">enabled and published</a> on your store.</p>
<p>For further information, refer to the <a href="https://shopify.dev/docs/api/admin-graphql/latest/objects/metafield" target="_blank" class="body-link">Metafield</a> and <a href="https://shopify.dev/docs/api/admin-graphql/latest/mutations/translationsRegister" target="_blank" class="body-link">translationsRegister</a> documentation.</p>
</div> ]]></description>
    <pubDate>Wed, 01 Apr 2026 16:00:00 +0000</pubDate>
    <atom:published>2026-04-01T16:00:00.000Z</atom:published>
    <atom:updated>2026-04-01T16:00:00.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <category>Admin GraphQL API</category>
    <category>2026-04</category>
    <link>https://shopify.dev/changelog/metafield-translations-now-available-via-graphql-admin-api</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/metafield-translations-now-available-via-graphql-admin-api</guid>
  </item>
  <item>
    <title>Line item component information now available for draft orders on the Customer Account API</title>
    <description><![CDATA[ <div class=""><p>As of Customer Account API version 2026-04, the <code>DraftOrderLineItem</code> object includes a new <a href="https://shopify.dev/docs/api/customer/2026-04/objects/DraftOrderLineItem#field-DraftOrderLineItem.fields.components" target="_blank" class="body-link"><code>components</code></a> field. This field returns the individual component line items associated with a parent line item.</p>
<p>Additionally, a new optional argument, <a href="https://shopify.dev/docs/api/customer/2026-04/objects/DraftOrder#field-DraftOrder.fields.lineItems.arguments.flattenComponents" target="_blank" class="body-link"><code>flattenComponents</code></a>, has been introduced to the <a href="https://shopify.dev/docs/api/customer/latest/connections/DraftOrderLineItemConnection#reference-DraftOrder.lineItems" target="_blank" class="body-link"><code>DraftOrder.lineItems</code></a> connection. For API versions 2026-04 and later, <code>flattenComponents</code> defaults to <code>false</code>, meaning only top-level line items are returned as nodes, with their components accessible via the <code>DraftOrderLineItem.components</code> field. If set to <code>true</code>, both parent and component line items are returned as top-level nodes, aligning with the behavior of earlier API versions. For versions prior to 2026-04, <code>flattenComponents</code> defaults to <code>true</code> to ensure backward compatibility.</p>
<h3>Example</h3>
<pre><code class="language-graphql">query {
  draftOrder(id: &quot;gid://shopify/DraftOrder/1&quot;) {
    lineItems(first: 10) {
      nodes {
        name
        quantity
        components {
          name
          quantity
        }
      }
    }
  }
}
</code></pre>
</div> ]]></description>
    <pubDate>Wed, 01 Apr 2026 16:00:00 +0000</pubDate>
    <atom:published>2026-04-01T16:00:00.000Z</atom:published>
    <atom:updated>2026-04-01T16:00:00.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <category>Customer Account API</category>
    <category>2026-04</category>
    <link>https://shopify.dev/changelog/line-item-components-draft-orders-customer-account-api</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/line-item-components-draft-orders-customer-account-api</guid>
  </item>
  <item>
    <title>Tax summary webhook now includes merchant business entity information</title>
    <description><![CDATA[ <div class=""><p>As of API version 2026-04, the <code>tax_summaries/create</code> webhook for Tax Partner Apps now includes merchant business entity information. This addition provides details about the legal entity responsible for transactions, which is crucial for accurate tax calculation and cross-shop entity mapping.</p>
<h2>What's new</h2>
<p>The tax webhook payload now features a new <code>merchant_business_entity</code> field at the root level of the tax summary. This field includes the following details:</p>
<ul>
<li><code>id</code>: The global ID of the business entity (format: <code>gid://shopify/BusinessEntity/{id}</code>)</li>
<li><code>legal_entity_id</code>: The stable Central Legal Entity ID from the Organizations Platform, enabling consistent identification of the same legal entity across multiple shops and markets</li>
<li><code>company_name</code>: The legal name of the business entity</li>
<li><code>display_name</code>: The display name of the business entity</li>
<li><code>address</code>: The business entity's address, including:<ul>
<li><code>country</code></li>
<li><code>province</code></li>
<li>Address lines (<code>address1</code>, <code>address2</code>)</li>
<li><code>city</code></li>
<li><code>zip</code></li>
<li><code>company</code></li>
</ul>
</li>
</ul>
<p>This field is optional and will only be present when the merchant has configured a legal business entity for their shop. The <code>legal_entity_id</code> sub-field is also optional and will only be present when the business entity is linked to a Central Legal Entity.</p>
<h3>Before (2026-04):</h3>
<pre><code class="language-json">{
  &quot;summary&quot;: {
    &quot;idempotent_key&quot;: &quot;abc123&quot;,
    &quot;shop&quot;: { ... },
    &quot;order_details&quot;: { ... }
  }
}
</code></pre>
<h3>After (2026-04):</h3>
<pre><code class="language-json">{
  &quot;summary&quot;: {
    &quot;idempotent_key&quot;: &quot;abc123&quot;,
    &quot;shop&quot;: { ... },
    &quot;order_details&quot;: { ... },
    &quot;merchant_business_entity&quot;: {
      &quot;id&quot;: &quot;gid://shopify/BusinessEntity/12345&quot;,
      &quot;legal_entity_id&quot;: &quot;223432432&quot;,
      &quot;company_name&quot;: &quot;Acme Corporation&quot;,
      &quot;display_name&quot;: &quot;Acme Corp&quot;,
      &quot;address&quot;: {
        &quot;country&quot;: &quot;CA&quot;,
        &quot;province&quot;: &quot;ON&quot;,
        &quot;address1&quot;: &quot;123 Main St&quot;,
        &quot;city&quot;: &quot;Toronto&quot;,
        &quot;zip&quot;: &quot;M5V 2T6&quot;,
        &quot;company&quot;: &quot;Acme Corporation&quot;
      }
    }
  }
}
</code></pre>
</div> ]]></description>
    <pubDate>Wed, 01 Apr 2026 16:00:00 +0000</pubDate>
    <atom:published>2026-04-01T16:00:00.000Z</atom:published>
    <atom:updated>2026-04-08T13:28:51.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <category>Admin GraphQL API</category>
    <category>Events &amp; webhooks</category>
    <category>2026-04</category>
    <link>https://shopify.dev/changelog/tax-summary-webhook-now-includes-merchant-business-entity-information</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/tax-summary-webhook-now-includes-merchant-business-entity-information</guid>
  </item>
  <item>
    <title>Tax Partner apps can now receive cart line properties in tax calculation requests</title>
    <description><![CDATA[ <div class=""><p>As of API version 2026-04, tax calculation requests for Tax Partner Apps can now include cart line item properties. These properties are custom name-value pairs that merchants can add to individual line items. </p>
<ul>
<li>Merchants configure properties on individual cart line items (such as <code>token</code>, <code>personalization</code>, or <code>gift_wrap</code>).</li>
<li>Tax Partner Apps specify which property keys they want to receive across all line items</li>
<li>Only the requested property keys are included in calculation requests.</li>
</ul>
<h2>Key limits</h2>
<p>You can specify a maximum of five keys. The five key limit applies to which property keys the Partner wants to receive, not the number of line items. For example:</p>
<ul>
<li><strong>Partner configures</strong>: <code>[&quot;token&quot;, &quot;personalization&quot;]</code> (2 keys)</li>
<li><strong>Cart has</strong>: 10 line items</li>
<li><strong>Result</strong>: All 10 line items will include their own <code>token</code> and <code>personalization</code> values (if present)</li>
</ul>
<h2>Example payload</h2>
<p>Cart line items in the <code>delivery_groups[].cart_lines[]</code> objects now include an optional <code>properties</code> field per line item.</p>
<p><strong>Before (2026-04):</strong></p>
<pre><code class="language-json">{
  &quot;delivery_groups&quot;: [{
    &quot;cart_lines&quot;: [{
      &quot;id&quot;: &quot;gid://shopify/CartLine/123&quot;,
      &quot;quantity&quot;: 1,
      &quot;merchandise&quot;: {
        &quot;id&quot;: &quot;gid://shopify/ProductVariant/456&quot;,
        &quot;title&quot;: &quot;Custom T-Shirt&quot;
      },
      &quot;cost&quot;: {
        &quot;amount_per_quantity&quot;: {
          &quot;currency_code&quot;: &quot;USD&quot;,
          &quot;amount&quot;: &quot;25.00&quot;
        }
      }
    }]
  }]
}
</code></pre>
<p><strong>(2026-04) &amp; After:</strong></p>
<pre><code class="language-json">{
  &quot;delivery_groups&quot;: [{
    &quot;cart_lines&quot;: [
      {
        &quot;id&quot;: &quot;gid://shopify/CartLine/7&quot;,
        &quot;quantity&quot;: 1,
        &quot;merchandise&quot;: {
          &quot;id&quot;: &quot;gid://shopify/ProductVariant/456&quot;,
          &quot;title&quot;: &quot;Custom T-Shirt&quot;
        },
        &quot;cost&quot;: {
          &quot;amount_per_quantity&quot;: {
            &quot;currency_code&quot;: &quot;USD&quot;,
            &quot;amount&quot;: &quot;25.00&quot;
          }
        },
        &quot;properties&quot;: {
          &quot;token&quot;: &quot;abc-123&quot;,
          &quot;personalization&quot;: &quot;John Smith&quot;
        }
      },
      {
        &quot;id&quot;: &quot;gid://shopify/CartLine/6&quot;,
        &quot;quantity&quot;: 2,
        &quot;merchandise&quot;: {
          &quot;id&quot;: &quot;gid://shopify/ProductVariant/789&quot;,
          &quot;title&quot;: &quot;Custom Mug&quot;
        },
        &quot;cost&quot;: {
          &quot;amount_per_quantity&quot;: {
            &quot;currency_code&quot;: &quot;USD&quot;,
            &quot;amount&quot;: &quot;15.00&quot;
          }
        },
        &quot;properties&quot;: {
          &quot;token&quot;: &quot;def-456&quot;,
          &quot;personalization&quot;: &quot;Jane Doe&quot;
        }
      }
    ]
  }]
}
</code></pre>
</div> ]]></description>
    <pubDate>Wed, 01 Apr 2026 16:00:00 +0000</pubDate>
    <atom:published>2026-04-01T16:00:00.000Z</atom:published>
    <atom:updated>2026-04-08T13:29:10.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <category>Admin GraphQL API</category>
    <category>2026-04</category>
    <link>https://shopify.dev/changelog/tax-partner-apps-can-now-receive-cart-line-properties-in-tax-calculation-requests</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/tax-partner-apps-can-now-receive-cart-line-properties-in-tax-calculation-requests</guid>
  </item>
  <item>
    <title>Improved user errors on the `fulfillmentOrderCancel` mutation</title>
    <description><![CDATA[ <div class=""><p>The <code>fulfillmentOrderCancel</code> mutation now returns a specific <code>fulfillmentOrderCancelError</code> type instead of the generic <code>userError</code> type.</p>
<h2>What's changing:</h2>
<p>The error response now includes a code field for easier programmatic error handling and identification.</p>
<h2>Why we made this change:</h2>
<p>This enhancement supports the new feature for manually marking fulfillment orders as in-progress, which allows merchants to self-report progress on their fulfillment orders. As part of this feature, cancelling fulfillment orders with reported progress is now restricted, and the enhanced error responses help developers handle these restrictions more effectively.</p>
</div> ]]></description>
    <pubDate>Wed, 01 Apr 2026 16:00:00 +0000</pubDate>
    <atom:published>2026-04-01T16:00:00.000Z</atom:published>
    <atom:updated>2026-04-01T16:00:00.000Z</atom:updated>
    <category>API</category>
    <category>Update</category>
    <category>Admin GraphQL API</category>
    <category>2026-04</category>
    <link>https://shopify.dev/changelog/fulfillment-order-cancel-error-codes</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/fulfillment-order-cancel-error-codes</guid>
  </item>
  <item>
    <title>Tax summary webhook and calculation requests now include customer and company metafields</title>
    <description><![CDATA[ <div class=""><p>As of API version 2026-04, tax calculation requests for tax partner apps now include buyer metafields. These fields provide custom data associated with customers (for D2C orders) and companies (for B2B orders) that may affect tax calculations. This enhancement allows tax partners to access merchant-defined buyer attributes for more accurate tax determination and compliance reporting.</p>
<h2>What's new</h2>
<p>The tax calculation request payload now includes new <code>metafields</code> arrays in the buyer identity section:</p>
<ol>
<li><p><strong>Customer metafields</strong> (<code>cart.buyer_identity.customer.metafields[]</code>):</p>
<ul>
<li>Available for D2C orders</li>
<li>Contains custom attributes defined by the merchant for individual customers</li>
<li>Examples include prescription status, tax exemption certificates, and customer classifications</li>
</ul>
</li>
<li><p><strong>Company metafields</strong> (<code>cart.buyer_identity.purchasing_company.company.metafields[]</code>):</p>
<ul>
<li>Available for B2B orders</li>
<li>Contains custom attributes defined by the merchant for business customers</li>
<li>Examples include wholesale status, resale certificates, and business classifications</li>
</ul>
</li>
</ol>
<h2>Metafield structure</h2>
<p>Each metafield contains information on namespace, key, type, and value. The following example shows the structure before and after the update:</p>
<h3>Customer metafields</h3>
<p><strong>Before (2026-01 and earlier):</strong> </p>
<pre><code class="language-json">{
  &quot;customer&quot;: {
    &quot;id&quot;: &quot;123&quot;,
    &quot;exemptions&quot;: []
  }
}
</code></pre>
<p><strong>After (2026-01):</strong></p>
<pre><code class="language-json">{
  &quot;customer&quot;: {
    &quot;id&quot;: &quot;123&quot;,
    &quot;exemptions&quot;: [],
    &quot;metafields&quot;: [
      {
        &quot;namespace&quot;: &quot;custom&quot;,
        &quot;key&quot;: &quot;has_prescription&quot;,
        &quot;type&quot;: &quot;boolean&quot;,
        &quot;value&quot;: &quot;true&quot;
      }
    ]
  }
}
</code></pre>
<h3>Company metafields</h3>
<p><strong>Before (2026-01 and earlier):</strong> </p>
<pre><code class="language-json">{
  &quot;purchasing_company&quot;: {
    &quot;company&quot;: {
      &quot;id&quot;: &quot;456&quot;,
      &quot;external_id&quot;: &quot;ACME-001&quot;
    },
    &quot;company_location&quot;: {
      &quot;id&quot;: &quot;789&quot;,
      &quot;external_id&quot;: &quot;ACME-LOCATION-001&quot;
    }
  }
}
</code></pre>
<p><strong>After (2026-04):</strong></p>
<pre><code class="language-json">{
  &quot;purchasing_company&quot;: {
    &quot;company&quot;: {
      &quot;id&quot;: &quot;456&quot;,
      &quot;external_id&quot;: &quot;ACME-001&quot;,
      &quot;metafields&quot;: [
        {
          &quot;namespace&quot;: &quot;custom&quot;,
          &quot;key&quot;: &quot;customer_class&quot;,
          &quot;type&quot;: &quot;single_line_text_field&quot;,
          &quot;value&quot;: &quot;wholesale&quot;
        }
      ]
    },
    &quot;company_location&quot;: {
      &quot;id&quot;: &quot;789&quot;,
      &quot;external_id&quot;: &quot;ACME-LOCATION-001&quot;
    }
  }
}
</code></pre>
</div> ]]></description>
    <pubDate>Wed, 01 Apr 2026 16:00:00 +0000</pubDate>
    <atom:published>2026-04-01T16:00:00.000Z</atom:published>
    <atom:updated>2026-04-01T16:00:00.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <category>Admin GraphQL API</category>
    <category>Events &amp; webhooks</category>
    <category>2026-04</category>
    <link>https://shopify.dev/changelog/tax-summary-webhook-and-calculation-requests-now-include-customer-and-company-metafields</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/tax-summary-webhook-and-calculation-requests-now-include-customer-and-company-metafields</guid>
  </item>
  <item>
    <title>Cart and checkout validation adds billing address and PO number error targets</title>
    <description><![CDATA[ <div class=""><p>As of API version 2026-04, you can validate billing addresses and purchase order (PO) numbers in Cart and Checkout Validation Functions. We've added billing address and PO Number to the function input graph and introduced new checkout field targets. This allows you to enforce compliance rules such as blocking prohibited billing countries and requiring PO numbers for B2B orders without relying upon client-side UI extensions.</p>
<p>What's changed</p>
<ul>
<li>Input graph fields: billingAddress and poNumber are available on all Shopify Function input graphs. They return null outside of Cart and Checkout Validation.  </li>
<li>Supported checkout field targets for error messages in Cart and Checkout Validation:  <ul>
<li><code>$.cart.billingAddress.{field}</code> (all standard address subfields)  </li>
<li><code>$.cart.poNumber</code></li>
</ul>
</li>
</ul>
<p>Impact</p>
<ul>
<li>No breaking changes. Your existing functions continue to run. You can optionally add validations for these targets.</li>
<li>Checkout surfaces field-level errors for billing address and PO number when your function returns validations for these targets.</li>
</ul>
<p>To learn more, see the <a href="https://shopify.dev/docs/api/functions/latest/cart-and-checkout-validation#supported-checkout-field-targets" target="_blank" class="body-link">developer documentation</a>.</p>
</div> ]]></description>
    <pubDate>Wed, 01 Apr 2026 15:00:00 +0000</pubDate>
    <atom:published>2026-04-01T15:00:00.000Z</atom:published>
    <atom:updated>2026-04-01T15:00:00.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <category>Functions</category>
    <category>2026-04</category>
    <link>https://shopify.dev/changelog/cart-and-checkout-validation-adds-billing-address-and-po-number-error-targets</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/cart-and-checkout-validation-adds-billing-address-and-po-number-error-targets</guid>
  </item>
  <item>
    <title>Multi-channel support for sales channel apps</title>
    <description><![CDATA[ <div class=""><p>Sales channel apps can now create and manage multiple channel connections from a single app. A single app can now establish more than one channel on a shop, with a separate specification and/or external account for each connection.</p>
<h2>Why this matters</h2>
<p>If you build a sales channel app that needs separate connections for different accounts or to sell in different markets or have different surfaces, you no longer need to split that model across multiple apps. You can keep those connections inside one app and manage them as distinct channels.</p>
<h2>What's new</h2>
<ul>
<li>A single sales channel app can establish multiple channels on the same shop.</li>
<li>Sales channels can now uses the Channel Config extension plus one specification file per target channel.</li>
<li>Each channel can point to a different specification and external account.</li>
</ul>
<h2>What partners should do</h2>
<h3>For new sales channel apps</h3>
<ul>
<li>All new sales channels should add a Channel Config extension.</li>
<li>Define one specification file per target channel.</li>
<li>Use <code>channelCreate</code> with a <code>specificationHandle</code>, <code>accountId</code>, and <code>accountName</code> to create each channel connection.</li>
</ul>
<h3>For existing sales channel apps</h3>
<ul>
<li>Migrate legacy sales channel app to use channel connections using this <a href="https://shopify.dev/docs/apps/build/sales-channels/migrating-channel-connection-apis" target="_blank" class="body-link">guide</a></li>
<li>Review any downstream code that assumes one channel per app. If your app reads or mutates channel-specific state, pass a channel ID instead of relying on app-level defaults.</li>
</ul>
<h2>New APIs in this release</h2>
<ul>
<li><p><a href="https://shopify.dev/docs/api/admin-graphql/latest/queries/channel" target="_blank" class="body-link">channel</a></p>
</li>
<li><p><code>channelCreate</code></p>
</li>
<li><p><code>channelByHandle</code></p>
</li>
<li><p><code>channelUpdate</code></p>
</li>
<li><p><code>channelDelete</code></p>
</li>
<li><p><code>channelFullSync</code></p>
</li>
</ul>
<h2>APIs impacted by this release</h2>
<p><strong>Deprecated</strong>: These single-channel APIs are now deprecated. They still function today but will be removed in a future API version:</p>
<p>| Deprecated API | Use instead |
|</p>
</div> ]]></description>
    <pubDate>Wed, 01 Apr 2026 13:00:00 +0000</pubDate>
    <atom:published>2026-04-01T13:00:00.000Z</atom:published>
    <atom:updated>2026-04-01T21:16:58.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <category>Admin GraphQL API</category>
    <category>2026-04</category>
    <link>https://shopify.dev/changelog/multi-channel-support-for-sales-channel-apps</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/multi-channel-support-for-sales-channel-apps</guid>
  </item>
  <item>
    <title>Payment method identifier now required for customerPaymentMethodRemoteCreate</title>
    <description><![CDATA[ <div class=""><p>As of API version 2026-07, the payment method identifier field is now required when using the <code>customerPaymentMethodRemoteCreate</code> mutation with Stripe, Authorize.net, or Braintree inputs.</p>
<p>The affected fields are:</p>
<ul>
<li><code>paymentMethodId</code> on <code>RemoteStripePaymentMethodInput</code></li>
<li><code>customerPaymentProfileId</code> on <code>RemoteAuthorizeNetCustomerPaymentProfileInput</code></li>
<li><code>paymentMethodToken</code> on <code>RemoteBraintreePaymentMethodInput</code></li>
</ul>
<p>These fields were previously optional at the schema level but are required for the payment method to be functional. Without a payment method identifier, remotely created payment methods cannot be used for payment processing. This change aligns the API schema with existing runtime requirements.</p>
<p>If you are already passing a payment method identifier when calling this mutation, no changes are needed. If you are not, update your integration to include the appropriate identifier for your gateway before adopting API version 2026-07.</p>
</div> ]]></description>
    <pubDate>Wed, 01 Apr 2026 12:00:00 +0000</pubDate>
    <atom:published>2026-04-01T12:00:00.000Z</atom:published>
    <atom:updated>2026-04-01T12:00:00.000Z</atom:updated>
    <category>API</category>
    <category>Breaking API Change</category>
    <category>Admin GraphQL API</category>
    <category>2026-07</category>
    <link>https://shopify.dev/changelog/payment-method-identifier-now-required-for-customerpaymentmethodremotecreate</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/payment-method-identifier-now-required-for-customerpaymentmethodremotecreate</guid>
  </item>
  <item>
    <title>Create unpaid orders from subscription billing attempts</title>
    <description><![CDATA[ <div class=""><p>In the API <code>2026-04</code> release candidate version, you can now include a new field called <code>paymentProcessingPolicy</code> when creating a billing attempt using the <a href="https://shopify.dev/docs/api/admin-graphql/unstable/mutations/subscriptionBillingAttemptCreate#arguments-subscriptionBillingAttemptInput.fields.paymentProcessingPolicy" target="_blank" class="body-link"><code>subscriptionBillingAttemptCreate</code></a> mutation. A billing attempt is an action to charge a customer based on their subscription.</p>
<p>The <code>paymentProcessingPolicy</code> field determines how the billing attempt is handled depending on the validity of the payment method:</p>
<ul>
<li>If you don't provide the <code>paymentProcessingPolicy</code> field, or if you set it to <code>FAIL_UNLESS_VALID_PAYMENT_METHOD</code>, a valid payment method is necessary to create an order successfully.</li>
<li>Alternatively, if you set the value to <code>SKIP_PAYMENT_AND_CREATE_UNPAID_ORDER</code>, the system will create an unpaid order even if there isn't a valid payment method available on the subscription contract.</li>
</ul>
<p>For detailed implementation instructions, please refer to our documentation on <a href="https://shopify.dev/docs/apps/build/purchase-options/subscriptions/contracts/build-a-subscription-contract" target="_blank" class="body-link">building a subscription contract</a>.</p>
</div> ]]></description>
    <pubDate>Wed, 01 Apr 2026 04:00:00 +0000</pubDate>
    <atom:published>2026-04-01T04:00:00.000Z</atom:published>
    <atom:updated>2026-04-01T04:00:00.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <category>Admin GraphQL API</category>
    <category>2026-04</category>
    <link>https://shopify.dev/changelog/create-unpaid-orders-from-subscription-billing-attempts</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/create-unpaid-orders-from-subscription-billing-attempts</guid>
  </item>
  <item>
    <title>Identifier support added to the productUpdate mutation</title>
    <description><![CDATA[ <div class=""><p>The <code>productUpdate</code> mutation now accepts an <code>identifier</code> argument, allowing you to look up the product to update by <code>id</code>, <code>handle</code>, or <code>customId</code> instead of passing the product <code>ID</code> inside the <code>input</code>.</p>
<p>The <code>id</code> and <code>handle</code> identifiers let you specify a product's global <code>ID</code> or <code>handle</code> directly. The <code>customId</code> identifier lets you reference a product by a unique metafield value using a <code>namespace</code>, <code>key</code>, and <code>value</code> combination, enabling workflows where external systems identify products by their own <code>ID</code>s.</p>
</div> ]]></description>
    <pubDate>Wed, 01 Apr 2026 04:00:00 +0000</pubDate>
    <atom:published>2026-04-01T04:00:00.000Z</atom:published>
    <atom:updated>2026-04-01T04:00:00.000Z</atom:updated>
    <category>API</category>
    <category>Update</category>
    <category>Admin GraphQL API</category>
    <category>2026-04</category>
    <link>https://shopify.dev/changelog/identifier-support-added-to-the-productupdate-mutation</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/identifier-support-added-to-the-productupdate-mutation</guid>
  </item>
  <item>
    <title>Report Fulfillment Order progress with new fulfillmentOrderReportProgress GraphQL mutation</title>
    <description><![CDATA[ <div class=""><p>As of API Version <code>2026-04</code> third-party logistics providers (3PLs) and fulfillment apps can now report progress on fulfillment orders with the <a href="https://shopify.dev/docs/api/admin-graphql/latest/mutations/fulfillmentOrderReportProgress" target="_blank" class="body-link"><code>fulfillmentOrderReportProgress</code> mutation</a>. This feature enables fulfillment services to indicate that work has commenced and, optionally, add brief status notes so merchants see what’s happening in their fulfilment pipeline.</p>
<h4>Key Details:</h4>
<ul>
<li>Reporting progress for 3PL-managed orders works with fulfillment orders in <code>IN_PROGRESS</code> status</li>
<li>Reporting progress for merchant-managed orders works with fulfillment orders in <code>OPEN</code> or <code>IN_PROGRESS</code> status (requires <code>write_merchant_managed_fulfillment_orders</code> scope)</li>
<li>Supports optional <code>reasonNotes</code> field (up to 256 characters) for additional context</li>
<li>New <code>fulfillment_orders/progress_reported</code> webhook available to track when progress has been reported</li>
<li><a href="https://shopify.dev/docs/api/admin-graphql/2026-01/objects/fulfillmentorder#field-supportedactions" target="_blank" class="body-link">fulfillmentOrder.supportedActions</a> field will now return the <a href="https://shopify.dev/docs/api/admin-graphql/2025-01/enums/FulfillmentOrderAction#enum-REPORT_PROGRESS" target="_blank" class="body-link">REPORT_PROGRESS</a> action when a fulfillment order can have progress reported.</li>
</ul>
<h4>New Webhooks</h4>
<p>Topic: <a href="https://shopify.dev/docs/api/webhooks/2026-04?accordionItem=webhooks-fulfillment_orders-progress_reported&reference=toml" target="_blank" class="body-link"><code>fulfillment_orders/progress_reported</code></a></p>
<p>This webhook is triggered when progress is reported on a fulfillment order. The payload includes the fulfillment order ID and status, the <code>initial_status</code> before the update, and <code>progress_report</code> details including <code>reason_notes</code> and attribution data for the app or user that reported the progress.</p>
<p>Topic: <a href="https://shopify.dev/docs/api/webhooks/2026-04?accordionItem=webhooks-fulfillment_orders-manually_reported_progress_stopped&reference=toml" target="_blank" class="body-link"><code>fulfillment_orders/manually_reported_progress_stopped</code></a></p>
<p> This webhook fires when a merchant-managed fulfillment order that has had progress manually reported (via <code>fulfillmentOrderReportProgress</code>) is subsequently marked as &quot;ready for fulfillment&quot;, transitioning it from IN_PROGRESS back to OPEN status. This webhook allows apps to know when a merchant has &quot;undone&quot; or &quot;cancelled&quot; the in-progress status they previously reported.</p>
</div> ]]></description>
    <pubDate>Wed, 01 Apr 2026 04:00:00 +0000</pubDate>
    <atom:published>2026-04-01T04:00:00.000Z</atom:published>
    <atom:updated>2026-04-01T04:00:00.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <category>Admin GraphQL API</category>
    <category>Events &amp; webhooks</category>
    <category>2026-04</category>
    <link>https://shopify.dev/changelog/report-fulfillment-order-progress-with-new-fulfillmentorderreportprogress-graphql-mutation</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/report-fulfillment-order-progress-with-new-fulfillmentorderreportprogress-graphql-mutation</guid>
  </item>
  <item>
    <title>Create subscriptions contracts without payment methods</title>
    <description><![CDATA[ <div class=""><p>In the API <code>2026-04</code> release candidate version, the <code>paymentMethodId</code> field is no longer required when creating a subscription contract using the <a href="https://shopify.dev/docs/api/admin-graphql/latest/mutations/subscriptioncontractatomiccreate#arguments-input.fields.contract.paymentMethodId" target="_blank" class="body-link"><code>subscriptionContractAtomicCreate</code></a> and <a href="https://shopify.dev/docs/api/admin-graphql/latest/mutations/subscriptioncontractcreate#arguments-input.fields.contract.paymentMethodId" target="_blank" class="body-link"><code>subscriptionContractCreate</code></a> mutations. This allows you to migrate subscription contracts even if they have missing or expired payment methods. </p>
<p>For implementation instructions, see our docs on <a href="https://shopify.dev/docs/apps/build/purchase-options/subscriptions/contracts/build-a-subscription-contract" target="_blank" class="body-link">how to build a subscription contract</a>.</p>
</div> ]]></description>
    <pubDate>Wed, 01 Apr 2026 04:00:00 +0000</pubDate>
    <atom:published>2026-04-01T04:00:00.000Z</atom:published>
    <atom:updated>2026-04-01T04:00:00.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <category>Admin GraphQL API</category>
    <category>2026-04</category>
    <link>https://shopify.dev/changelog/create-subscriptions-contracts-without-payment-methods</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/create-subscriptions-contracts-without-payment-methods</guid>
  </item>
  <item>
    <title>Improved user errors on the `fulfillmentOrderMove` mutation</title>
    <description><![CDATA[ <div class=""><p>The <code>fulfillmentOrderMove</code> mutation now returns a specific <code>fulfillmentOrderMoveUserError</code> type instead of the generic <code>userError</code> type.</p>
<h2>What's changing:</h2>
<p>The user error response now includes a code field for easier programmatic error handling and identification.</p>
<h2>Why we made this change:</h2>
<p>This enhancement supports the new manual in-progress fulfillment orders feature, which allows merchants to self-report progress on their fulfillment orders. As part of this feature, moving fulfillment orders with reported progress is now restricted, and the enhanced error responses help developers handle these restrictions more effectively.</p>
<h2>Learn more</h2>
<p><a href="https://shopify.dev/docs/api/admin-graphql/latest/mutations/fulfillmentOrderMove" target="_blank" class="body-link">Learn more about the <code>fulfillmentOrderMove</code> mutation</a>.</p>
</div> ]]></description>
    <pubDate>Wed, 01 Apr 2026 04:00:00 +0000</pubDate>
    <atom:published>2026-04-01T04:00:00.000Z</atom:published>
    <atom:updated>2026-04-01T04:00:00.000Z</atom:updated>
    <category>API</category>
    <category>Update</category>
    <category>Admin GraphQL API</category>
    <category>2026-04</category>
    <link>https://shopify.dev/changelog/fulfillment-order-move-mutation-error-codes</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/fulfillment-order-move-mutation-error-codes</guid>
  </item>
  <item>
    <title>Role-based access control and org management for partners</title>
    <description><![CDATA[ <div class=""><p>We have revamped the way partner organizations manage users and stores.</p>
<ul>
<li><strong>Role-based Access Control:</strong> Assign roles to users instead of configuring permissions individually. We offer seven system roles that cover organization-wide administration, store access, app development, and merchant-granted collaborator permissions. You can also create custom roles for any needs not covered by the system roles.</li>
<li><strong>New Organization Structure:</strong> Partner organizations now have one Organization Owner and multiple Organization Admins. Previous owners, except the primary owner, have been migrated to Organization Admins, retaining the same access without transferring ownership.</li>
<li><strong>Unified Store Management in Dev Dashboard:</strong> All your dev stores, client transfer stores, and collaborator stores are now consolidated in one place. No more switching between dashboards.</li>
<li><strong>Seamless Migration:</strong> Your organization will be automatically migrated, preserving your team's access and converting it to corresponding roles. No action is required. </li>
<li><strong>Partner Dashboard:</strong> Payouts, app distribution, theme submissions, and referrals remain unchanged in the Partner Dashboard.</li>
</ul>
<p><a href="https://www.shopify.com/partners/blog/improved-building-for-partners" target="_blank" class="body-link">Learn more</a> → 
<a href="https://help.shopify.com/partners/manage-account/manage-users?utm_source=mozart&utm_medium=email&utm_campaign=partner_rbac&utm_content=changelog" target="_blank" class="body-link">View help docs</a> →</p>
</div> ]]></description>
    <pubDate>Mon, 30 Mar 2026 16:00:00 +0000</pubDate>
    <atom:published>2026-03-30T16:00:00.000Z</atom:published>
    <atom:updated>2026-03-30T16:00:00.000Z</atom:updated>
    <category>Platform</category>
    <category>Update</category>
    <link>https://shopify.dev/changelog/role-based-access-control-and-org-management-for-partners</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/role-based-access-control-and-org-management-for-partners</guid>
  </item>
  <item>
    <title>Removing `visible_to_storefront_api` field on metaobject field definitions</title>
    <description><![CDATA[ <div class=""><h2>What's changing</h2>
<p>The <code>visibleToStorefrontApi</code> field/input field is deprecated and removed from the <code>unstable</code> version of the GraphQL Admin API for the following types:</p>
<ul>
<li><a href="https://shopify.dev/docs/api/admin-graphql/unstable/objects/MetaobjectFieldDefinition" target="_blank" class="body-link"><code>MetaobjectFieldDefinition</code></a></li>
<li><a href="https://shopify.dev/docs/api/admin-graphql/unstable/input-objects/MetaobjectFieldDefinitionCreateInput" target="_blank" class="body-link"><code>MetaobjectFieldDefinitionCreateInput</code></a></li>
<li><a href="https://shopify.dev/docs/api/admin-graphql/unstable/input-objects/MetaobjectFieldDefinitionUpdateInput" target="_blank" class="body-link"><code>MetaobjectFieldDefinitionUpdateInput</code></a></li>
<li><a href="https://shopify.dev/docs/api/admin-graphql/latest/objects/StandardMetaobjectDefinitionFieldTemplate" target="_blank" class="body-link"><code>StandardMetaobjectDefinitionFieldTemplate</code></a></li>
</ul>
<h2>Who's affected</h2>
<ul>
<li>Anyone using <code>visibleToStorefrontApi</code> field or input field on a Metaobject field definition</li>
</ul>
<p><strong>NOTE</strong>: With the exception of <code>StandardMetaobjectDefinitionFieldTemplate</code>, this field was only ever exposed in <code>unstable</code>.</p>
<h2>Why we're making this change</h2>
<p>This field implies a system behaviour that doesn't exist. It isn't possible to toggle the storefront visibility of individual fields. The only storefront visibility controls are on the <code>access</code> fields of the metaobject definition itself.</p>
<h2>Action required</h2>
<p>If your app has a query or mutation that's referencing the <code>visibleToStorefrontApi</code> field on a Metaobject field definition, you need to remove that field.</p>
<h2>Key dates</h2>
<p><strong>April 2, 2026</strong>: <code>visibleToStorefrontApi</code> field on metaobject field definitions will be removed from <code>unstable</code> and <code>2026-07</code></p>
</div> ]]></description>
    <pubDate>Mon, 30 Mar 2026 16:00:00 +0000</pubDate>
    <atom:published>2026-03-30T16:00:00.000Z</atom:published>
    <atom:updated>2026-03-31T21:07:43.000Z</atom:updated>
    <category>Action Required</category>
    <category>API</category>
    <category>Deprecation announcement</category>
    <category>Admin GraphQL API</category>
    <category>2026-07</category>
    <link>https://shopify.dev/changelog/removing-storefront-visibility-field-on-metaobject-field-definitions</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/removing-storefront-visibility-field-on-metaobject-field-definitions</guid>
  </item>
  <item>
    <title>The Shopify CLI app release `--force` flag is deprecated and will be removed</title>
    <description><![CDATA[ <div class=""><p>We are deprecating the <code>--force</code> flag on the <code>shopify app deploy</code> and <code>shopify app release</code> commands. The flag will be removed in a Shopify CLI release in May 2026.</p>
<h2>Why we're making this change</h2>
<p>The <code>--force</code> flag skips all confirmation prompts, including for extension deletions that can permanently remove data on installed shops. It doesn't distinguish between low-risk operations (adding or updating extensions) and high-risk ones (deleting them). The <a href="https://shopify.dev/changelog/more-control-over-app-deploys-in-cicd-pipelines" target="_blank" class="body-link">previously released</a> <code>--allow-updates</code> and <code>--allow-deletes</code> flags give you granular control, so your CI/CD pipelines can run unattended without the risk of accidental, irreversible deletions.</p>
<h2>What you should do</h2>
<p>If you are <a href="https://shopify.dev/docs/apps/launch/deployment/deploy-in-ci-cd-pipeline" target="_blank" class="body-link">automating your app releases in a CI/CD environment</a>, you should adjust your scripts to use the <a href="https://shopify.dev/docs/api/shopify-cli/app/app-deploy#flags-propertydetail-allowupdates" target="_blank" class="body-link"><code>--allow-updates</code></a> flag instead, which will ensure that extensions can be added and updated, but not deleted.</p>
<p>For example:  </p>
<pre><code>shopify app deploy --config production --allow-updates
</code></pre>
<p>When extension deletion is needed, you can utilize an interactive <code>deploy</code> or enable the <a href="https://shopify.dev/docs/api/shopify-cli/app/app-deploy#flags-propertydetail-allowdeletes" target="_blank" class="body-link"><code>--allow-deletes</code></a> flag. Use caution and enable <code>--allow-deletes</code> only for manual workflow runs when you are certain that you want to delete an extension and all its configuration on installed shops.</p>
<p>For more information, see <a href="https://shopify.dev/docs/apps/launch/deployment/deploy-in-ci-cd-pipeline#controlling-extension-and-configuration-deployment" target="_blank" class="body-link">documentation on CI/CD deployment for apps</a>.</p>
</div> ]]></description>
    <pubDate>Wed, 25 Mar 2026 14:00:00 +0000</pubDate>
    <atom:published>2026-03-25T14:00:00.000Z</atom:published>
    <atom:updated>2026-03-25T16:40:37.000Z</atom:updated>
    <category>Action Required</category>
    <category>Tools</category>
    <category>Deprecation announcement</category>
    <link>https://shopify.dev/changelog/the-shopify-cli-app-release-force-flag-is-deprecated-and-will-be-removed</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/the-shopify-cli-app-release-force-flag-is-deprecated-and-will-be-removed</guid>
  </item>
  <item>
    <title>Updated handling of customer data erasure requests with recent orders</title>
    <description><![CDATA[ <div class=""><p>As of March 23, 2026, <a href="https://help.shopify.com/en/manual/privacy-and-security/privacy/processing-customer-data-requests#erase-customer-personal-data" target="_blank" class="body-link">customer data erasure requests</a> will no longer be held in a pending state for 180 days from the date of the customer's most recent order. </p>
<p>Erasure requests will now be processed 10 days after the request was submitted, regardless of when the customer's most recent order was placed. For recipients of gift cards that have been scheduled to send, the erasure request will remain in a pending state until the gift card has been delivered.</p>
<p>This update simplifies the overall experience for managing customer data requests.</p>
</div> ]]></description>
    <pubDate>Mon, 23 Mar 2026 21:30:00 +0000</pubDate>
    <atom:published>2026-03-23T21:30:00.000Z</atom:published>
    <atom:updated>2026-03-23T21:30:00.000Z</atom:updated>
    <category>Platform</category>
    <category>Update</category>
    <link>https://shopify.dev/changelog/updated-handling-of-customer-data-erasure-requests-with-recent-orders</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/updated-handling-of-customer-data-erasure-requests-with-recent-orders</guid>
  </item>
  <item>
    <title>Removal of pre_tax_price from the Order REST Admin API</title>
    <description><![CDATA[ <div class=""><p>The <code>pre_tax_price</code> and <code>pre_tax_price_set</code> fields on order line items in the <a href="https://shopify.dev/docs/api/admin-rest" target="_blank" class="body-link">REST Admin API</a> are being removed. These fields were previously available to stores with the Avalara AvaTax 1.0 integration enabled, which was deprecated in April 2025.</p>
<h3>What you should do</h3>
<p>Use the GraphQL Admin API to access order line item pricing data. </p>
</div> ]]></description>
    <pubDate>Mon, 23 Mar 2026 16:00:00 +0000</pubDate>
    <atom:published>2026-03-23T16:00:00.000Z</atom:published>
    <atom:updated>2026-03-23T16:00:00.000Z</atom:updated>
    <category>API</category>
    <category>Breaking API Change</category>
    <category>Admin REST API</category>
    <link>https://shopify.dev/changelog/removal-of-pretaxprice-from-the-order-rest-admin-api</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/removal-of-pretaxprice-from-the-order-rest-admin-api</guid>
  </item>
  <item>
    <title>Adding barcode support to inventory shipments API</title>
    <description><![CDATA[ <div class=""><p>We're adding barcode support to inventory shipments in version <code>2026-04</code>, enabling merchants to assign barcodes to shipments for faster receiving workflows.</p>
<p>The following API changes are included:</p>
<p><strong>New field on <a href="https://shopify.dev/docs/api/admin-graphql/latest/objects/InventoryShipment" target="_blank" class="body-link"><code>InventoryShipment</code></a></strong></p>
<ul>
<li><code>barcode: String</code> - A nullable field representing the unique barcode assigned to a shipment.</li>
</ul>
<p><strong>Updated <a href="https://shopify.dev/docs/api/admin-graphql/latest/mutations/inventoryShipmentCreate" target="_blank" class="body-link"><code>inventoryShipmentCreate</code></a> mutation</strong></p>
<ul>
<li>The <a href="https://shopify.dev/docs/api/admin-graphql/latest/input-objects/InventoryShipmentCreateInput" target="_blank" class="body-link"><code>InventoryShipmentCreateInput</code></a> now accepts an optional <code>barcode: String</code> field to assign a barcode when creating a shipment.</li>
</ul>
<p><strong>New <a href="https://shopify.dev/docs/api/admin-graphql/latest/mutations/inventoryShipmentSetBarcode" target="_blank" class="body-link"><code>inventoryShipmentSetBarcode</code></a> mutation</strong></p>
<ul>
<li>Sets or clears the barcode on an existing shipment. Pass an empty string to clear the barcode.</li>
</ul>
<p>Example usage:</p>
<pre><code class="language-graphql">mutation {
  inventoryShipmentSetBarcode(
    inventoryShipmentId: &quot;gid://shopify/InventoryShipment/123&quot;
    barcode: &quot;SHIP-2026-0001&quot;
  ) {
    inventoryShipment {
      id
      barcode
    }
    userErrors {
      code
      field
      message
    }
  }
}
</code></pre>
<p><strong>What you need to know</strong></p>
<ul>
<li>Barcodes must be unique per shop. Two shipments in the same shop cannot share the same barcode.</li>
<li>Barcodes have a maximum length of <code>255</code> characters.</li>
<li>Leading/trailing whitespace is automatically stripped. Barcodes consisting only of whitespace are treated as empty.</li>
</ul>
<p><strong>Error codes</strong></p>
<ul>
<li><code>DUPLICATE_BARCODE</code>: Another shipment in the same shop already has this barcode.</li>
<li><code>SHIPMENT_NOT_FOUND</code>: The specified shipment does not exist.</li>
<li><code>BARCODE_TOO_LONG</code>: The barcode exceeds the maximum length of <code>255</code> characters.</li>
</ul>
<p><strong>Why we made this change</strong>
Merchants transferring inventory between locations, for example, from a warehouse to a retail store, currently have to scan and receive each item in a shipment one by one. This is slow and error-prone for large shipments. Shipment barcodes let warehouse systems and 3PLs attach a scannable identifier (such as a GS1-128 code) to a shipment so that the entire shipment can be identified and received in a single scan.</p>
</div> ]]></description>
    <pubDate>Mon, 23 Mar 2026 16:00:00 +0000</pubDate>
    <atom:published>2026-03-23T16:00:00.000Z</atom:published>
    <atom:updated>2026-03-23T16:00:00.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <category>Admin GraphQL API</category>
    <category>2026-04</category>
    <link>https://shopify.dev/changelog/adding-barcode-support-to-inventory-shipments-api</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/adding-barcode-support-to-inventory-shipments-api</guid>
  </item>
  <item>
    <title>Expiring offline access tokens required for new public apps as of April 1, 2026</title>
    <description><![CDATA[ <div class=""><p>We're updating how public apps handle offline access tokens to enhance merchant data protection. Starting April 1, 2026, all new public apps must request and use <a href="https://shopify.dev/docs/apps/build/authentication-authorization/access-tokens/offline-access-tokens#expiring-vs-non-expiring-offline-tokens" target="_blank" class="body-link">expiring offline access tokens</a>.</p>
<h2>What apps are affected</h2>
<ul>
<li><a href="https://shopify.dev/docs/apps/launch/distribution#capabilities-and-requirements" target="_blank" class="body-link">Public apps</a> created on or after April 1, 2026 that call the Admin API</li>
</ul>
<h2>What apps are not affected</h2>
<ul>
<li>Public apps created before April 1, 2026</li>
<li>Custom apps created at any time</li>
<li>Apps created by merchants either in the Dev Dashboard or in the admin</li>
</ul>
<h2>Why we’re making this change</h2>
<p>Expiring tokens enhance security. If a token is ever leaked, its limited lifespan significantly narrows the risk to both your app and the merchants who trust it. This change aligns with modern OAuth practices, and as a developer it lets you build your app around predictable refresh flows.</p>
<h2>Action required</h2>
<p><strong>New public apps</strong>: Implement expiring offline access tokens. If you use Shopify’s app templates and libraries this is already handled for you.</p>
<p>Need help? Engage with the <a href="https://community.shopify.dev/c/dev-platform/32" target="_blank" class="body-link">dev platform community</a> for support and questions.</p>
</div> ]]></description>
    <pubDate>Fri, 20 Mar 2026 19:30:00 +0000</pubDate>
    <atom:published>2026-03-20T19:30:00.000Z</atom:published>
    <atom:updated>2026-03-20T19:30:00.000Z</atom:updated>
    <category>Action Required</category>
    <category>API</category>
    <category>Deprecation announcement</category>
    <category>Admin GraphQL API</category>
    <category>Admin REST API</category>
    <link>https://shopify.dev/changelog/expiring-offline-access-tokens-required-for-public-apps-april-1-2026</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/expiring-offline-access-tokens-required-for-public-apps-april-1-2026</guid>
  </item>
  <item>
    <title>Process refunds only through the original payment processor – Requirement update</title>
    <description><![CDATA[ <div class=""><p>We've updated <a href="https://shopify.dev/docs/apps/launch/shopify-app-store/app-store-requirements#process-refunds-only-through-the-original-payment-processor" target="_blank" class="body-link">requirement 1.1.15</a> for Shopify App Store apps. </p>
<p>Apps must now process refunds only through the original payment processor. Previously, apps were prohibited from offering methods for processing refunds outside of the original payment processor. With this update, if your app issues store credits during a refund, it must use either the '<a href="https://shopify.dev/docs/api/admin-graphql/latest/mutations/refundCreate" target="_blank" class="body-link">refundCreate</a>' or '<a href="https://shopify.dev/docs/api/admin-graphql/latest/mutations/returnProcess" target="_blank" class="body-link">returnProcess</a>' mutation. This change ensures that refunds and store credits are handled securely and consistently within Shopify’s platform.</p>
<p>For more details on the updated requirement, please refer to the <a href="https://shopify.dev/docs/apps/launch/shopify-app-store/app-store-requirements#process-refunds-only-through-the-original-payment-processor" target="_blank" class="body-link">Shopify App Store requirements documentation</a>.</p>
<p>This requirement update will be enforced immediately for new app submissions and will take effect on April 22, 2026, for published apps.</p>
</div> ]]></description>
    <pubDate>Fri, 20 Mar 2026 17:00:00 +0000</pubDate>
    <atom:published>2026-03-20T17:00:00.000Z</atom:published>
    <atom:updated>2026-03-20T18:05:30.000Z</atom:updated>
    <category>Action Required</category>
    <category>App store</category>
    <category>Update</category>
    <link>https://shopify.dev/changelog/process-refunds-only-through-the-original-payment-processor-requirement-update</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/process-refunds-only-through-the-original-payment-processor-requirement-update</guid>
  </item>
  <item>
    <title>Admin intents now support Settings</title>
    <description><![CDATA[ <div class=""><p>We're excited to announce that <a href="/docs/apps/build/admin/admin-intents" target="_blank" class="body-link">admin intents</a> now support Settings. This new feature allows apps to direct merchants straight to specific <strong>Settings</strong> pages within the Shopify admin.</p>
<h3>What's new?</h3>
<p>Previously, directing merchants to a specific <strong>Settings</strong> page required deep links or manual navigation instructions. Now, with Settings support for admin intents, your app can open a Settings route with a single API call. This keeps merchants focused and eliminates unnecessary navigation steps.</p>
<h3>Supported intents</h3>
<p>The following Settings intents are now available:</p>
<p><strong>General</strong></p>
<ul>
<li><code>edit:settings/StoreDetails</code></li>
<li><code>edit:settings/StoreDefaults</code></li>
<li><code>edit:settings/OrderIdFormat</code></li>
<li><code>edit:settings/OrderProcessing</code></li>
</ul>
<p><strong>Locations</strong></p>
<ul>
<li><code>create:shopify/Location</code></li>
<li><code>edit:shopify/Location</code></li>
<li><code>edit:settings/LocationDefault</code></li>
</ul>
<h3>How it works</h3>
<p>When your app invokes a Settings intent, the Shopify admin opens the relevant <strong>Settings</strong> page within a page stack, which organizes pages in a layered manner. The Shopify admin automatically scrolls to the targeted card, ensuring merchants land precisely where they need to be.</p>
<p>Sidekick uses Settings intents to streamline configuration tasks, providing merchants with a link that opens the correct <strong>Settings</strong> page upon clicking.</p>
<h3>Learn more</h3>
<p>To get started, refer to the <a href="/docs/apps/build/admin/admin-intents" target="_blank" class="body-link">admin intents documentation</a> and the <a href="/docs/api/app-home/apis/intents" target="_blank" class="body-link">Intents API reference</a>.</p>
<h3>Holler at us</h3>
<p>Leave us feedback, comments, and questions in the <a href="https://community.shopify.dev/c/extensions/5" target="_blank" class="body-link">Shopify Developer Community</a>. We'd love to hear from you. </p>
</div> ]]></description>
    <pubDate>Fri, 20 Mar 2026 14:00:00 +0000</pubDate>
    <atom:published>2026-03-20T14:00:00.000Z</atom:published>
    <atom:updated>2026-03-20T14:00:00.000Z</atom:updated>
    <category>API</category>
    <category>Update</category>
    <link>https://shopify.dev/changelog/admin-intents-now-support-settings</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/admin-intents-now-support-settings</guid>
  </item>
  <item>
    <title>POS UI extensions can now run without network access</title>
    <description><![CDATA[ <div class=""><p>POS UI extensions can now continue running even when a merchant’s device loses network access.</p>
<p>This feature ensures uninterrupted service during connectivity issues. It is especially beneficial for merchants in environments with unreliable internet, such as pop-up shops, outdoor markets, or large retail spaces.</p>
<h3>How to Enable</h3>
<p>To enable this feature, set <code>runs_offline = true</code> in the <code>[extensions.supported_features]</code> section of your extension configuration:</p>
<pre><code class="language-toml">[extensions.supported_features]
runs_offline = true
</code></pre>
<p>Once enabled, your extension will continue to function even if the merchant’s device loses network access. For comprehensive details on configuring offline behavior and best practices, refer to our <a href="https://shopify.dev/docs/api/pos-ui-extensions/latest#run-extensions-without-network-access" target="_blank" class="body-link">developer documentation</a>.</p>
<h3>Requirements</h3>
<ul>
<li>POS version 11.0 or later</li>
<li>Shopify CLI v3.92 or later</li>
</ul>
</div> ]]></description>
    <pubDate>Tue, 17 Mar 2026 16:00:00 +0000</pubDate>
    <atom:published>2026-03-17T16:00:00.000Z</atom:published>
    <atom:updated>2026-03-19T17:49:04.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <category>POS Extensions</category>
    <link>https://shopify.dev/changelog/pos-ui-extensions-can-now-run-without-network-access</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/pos-ui-extensions-can-now-run-without-network-access</guid>
  </item>
  <item>
    <title>`inventoryTransferDelete` adds `INVALID_STATE` error code for transfers with in-progress product import</title>
    <description><![CDATA[ <div class=""><p>Starting in version 2026-07, the <code>inventoryTransferDelete</code> mutation will return a new error code: <code>INVALID_STATE</code>. This error will be returned when a client attempts to delete an inventory transfer while a product import related to that transfer is in progress.</p>
<ul>
<li><strong>New error code added:</strong> <code>INVALID_STATE</code>  </li>
<li><strong>API affected:</strong> <code>inventoryTransferDelete</code> mutation  </li>
<li><strong>Error enum updated:</strong> <code>InventoryTransferDeleteUserErrorCode</code></li>
</ul>
<p>For older API versions, the mutation will not include the <code>INVALID_STATE</code> code in the error payload. However, the <code>message</code> field will still provide context about the blocking product import.</p>
<p>For more details, see the updated <a href="https://shopify.dev/docs/api/admin-graphql/latest/enums/InventoryTransferDeleteUserErrorCode" target="_blank" class="body-link">InventoryTransferDeleteUserErrorCode enum</a> and the <a href="https://shopify.dev/docs/api/admin-graphql/latest/mutations/inventoryTransferDelete" target="_blank" class="body-link">inventoryTransferDelete mutation documentation</a>.</p>
</div> ]]></description>
    <pubDate>Tue, 17 Mar 2026 13:00:00 +0000</pubDate>
    <atom:published>2026-03-17T13:00:00.000Z</atom:published>
    <atom:updated>2026-03-17T13:00:00.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <category>Admin GraphQL API</category>
    <category>2026-07</category>
    <link>https://shopify.dev/changelog/inventorytransferdelete-adds-invalidstate-error-code-for-transfers-with-in-progress-product-import</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/inventorytransferdelete-adds-invalidstate-error-code-for-transfers-with-in-progress-product-import</guid>
  </item>
  <item>
    <title>Making `fieldDefinitions` optional in `metaobjectDefinitionCreate`</title>
    <description><![CDATA[ <div class=""><p>Starting in April 2026, the <a href="https://shopify.dev/docs/api/admin-graphql/unstable/mutations/metaobjectDefinitionCreate#arguments-definition.fields.fieldDefinitions" target="_blank" class="body-link"><code>fieldDefinitions</code></a> input argument for the <a href="https://shopify.dev/docs/api/admin-graphql/unstable/mutations/metaobjectDefinitionCreate" target="_blank" class="body-link"><code>metaobjectDefinitionCreate</code></a> mutation will become optional. This change means that developers will no longer be required to specify <code>fieldDefinitions</code> when creating a new metaobject definition. Existing implementations that rely on <code>fieldDefinitions</code> will continue to function as before, but developers can now choose to omit this argument if it is not needed for their specific use case.</p>
</div> ]]></description>
    <pubDate>Mon, 16 Mar 2026 16:00:00 +0000</pubDate>
    <atom:published>2026-03-16T16:00:00.000Z</atom:published>
    <atom:updated>2026-03-16T16:00:00.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <category>Admin GraphQL API</category>
    <category>2026-04</category>
    <link>https://shopify.dev/changelog/making-fielddefinitions-optional-in-metaobjectdefinitioncreate</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/making-fielddefinitions-optional-in-metaobjectdefinitioncreate</guid>
  </item>
  <item>
    <title>Adding `createdAt` and `updatedAt` fields to `MetaobjectDefinition` objects</title>
    <description><![CDATA[ <div class=""><p>The <a href="https://shopify.dev/docs/api/admin-graphql/unstable/objects/metaobjectdefinition#field-MetaobjectDefinition.fields.createdAt" target="_blank" class="body-link"><code>createdAt</code></a> and  <a href="https://shopify.dev/docs/api/admin-graphql/unstable/objects/metaobjectdefinition#field-MetaobjectDefinition.fields.updatedAt" target="_blank" class="body-link"><code>updatedAt</code></a> fields will become available on <a href="https://shopify.dev/docs/api/admin-graphql/unstable/objects/metaobjectdefinition" target="_blank" class="body-link"><code>MetaobjectDefinition</code></a> objects in API version <code>2026-04</code></p>
</div> ]]></description>
    <pubDate>Mon, 16 Mar 2026 16:00:00 +0000</pubDate>
    <atom:published>2026-03-16T16:00:00.000Z</atom:published>
    <atom:updated>2026-03-16T16:00:00.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <category>Admin GraphQL API</category>
    <category>2026-04</category>
    <link>https://shopify.dev/changelog/adding-createdat-and-updatedat-fields-to-metaobjectdefinition-objects</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/adding-createdat-and-updatedat-fields-to-metaobjectdefinition-objects</guid>
  </item>
  <item>
    <title>New rejection reason codes in Payments Apps API</title>
    <description><![CDATA[ <div class=""><p>The Payments Apps API now provides more granular decline reason codes for rejected payment sessions. Multiple new rejection codes have been added to the <a href="https://shopify.dev/docs/api/payments-apps/2026-04/enums/PaymentSessionStateRejectedReason" target="_blank" class="body-link"><code>PaymentSessionStateRejectedReason</code></a> enum alongside a new source field, giving payments apps more standardized, actionable ways to communicate to merchants why a payment was declined.</p>
<h2>New rejection reason codes</h2>
<p>The following error codes expand the existing set of rejection reasons with more specific rejection information:</p>
<p>| Error Code | Description |
|</p>
</div> ]]></description>
    <pubDate>Mon, 16 Mar 2026 16:00:00 +0000</pubDate>
    <atom:published>2026-03-16T16:00:00.000Z</atom:published>
    <atom:updated>2026-03-16T16:00:00.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <category>Payments Apps API</category>
    <category>2026-04</category>
    <link>https://shopify.dev/changelog/new-rejection-reason-codes-in-payments-apps-graphql-api</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/new-rejection-reason-codes-in-payments-apps-graphql-api</guid>
  </item>
  <item>
    <title>New payment decline codes added to `OrderTransactionErrorCode` enum</title>
    <description><![CDATA[ <div class=""><p>We're adding new error codes to the <a href="https://shopify.dev/docs/api/admin-graphql/latest/enums/OrderTransactionErrorCode" target="_blank" class="body-link">OrderTransactionErrorCode</a> enum to provide more granular detail about the transaction failure. You can use this more detailed response to improve customer interactions.</p>
<h3>What's new</h3>
<p>These error codes enable precise identification of transaction issues:</p>
<p>| Error Code | Description |
|</p>
</div> ]]></description>
    <pubDate>Mon, 16 Mar 2026 16:00:00 +0000</pubDate>
    <atom:published>2026-03-16T16:00:00.000Z</atom:published>
    <atom:updated>2026-03-16T16:00:00.000Z</atom:updated>
    <category>Action Required</category>
    <category>API</category>
    <category>New</category>
    <category>Admin GraphQL API</category>
    <category>2026-04</category>
    <link>https://shopify.dev/changelog/new-payment-decline-codes-added-to-ordertransactionerrorcode-enum</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/new-payment-decline-codes-added-to-ordertransactionerrorcode-enum</guid>
  </item>
  <item>
    <title>ShopifyQL returns fields deprecated and replaced with sales reversals fields</title>
    <description><![CDATA[ <div class=""><p>In GraphQL Admin API version <code>2026-04</code>, several Returns fields in analytics, which can be queried through <a href="https://shopify.dev/docs/api/shopifyql" target="_blank" class="body-link">ShopifyQL</a>, have been deprecated and replaced with renamed versions (e.g., <code>sales_reversals</code>, <code>reversed_quantity</code>) to better reflect that they capture all order adjustments, including refunds, returns, order edits, and cancellations. The definitions remain unchanged.</p>
<h2>Deprecation timeline</h2>
<p>Deprecated fields will be removed in version 2026-07, but will still be accessible via older API versions until 2027-04.</p>
<h2>Why we did this</h2>
<p>The new field names clarify the difference between broad order adjustments (sales reversals) and physical returns. With the launch of return reason reporting, you can now see physical quantities returned and their reasons at the line item level, separate from overall order adjustments. Access these details in the returns schema using <code>returned_quantity</code>, <code>return_line_item_reason</code>, and <code>is_unverified_return_line_item</code>.</p>
<h2>What you need to do</h2>
<p>Update your ShopifyQL queries to use the new <code>sales_reversals</code> and <code>reversed_quantity</code> fields (see mapping table below)</p>
<p>| Deprecated field | New replacement field |
| :</p>
</div> ]]></description>
    <pubDate>Sat, 14 Mar 2026 00:30:00 +0000</pubDate>
    <atom:published>2026-03-14T00:30:00.000Z</atom:published>
    <atom:updated>2026-03-14T00:30:00.000Z</atom:updated>
    <category>Action Required</category>
    <category>API</category>
    <category>Deprecation announcement</category>
    <category>Admin GraphQL API</category>
    <category>2026-04</category>
    <link>https://shopify.dev/changelog/shopifyql-returns-fields-deprecated-and-replaced-with-sales-reversals-fields</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/shopifyql-returns-fields-deprecated-and-replaced-with-sales-reversals-fields</guid>
  </item>
  <item>
    <title>Checkout and Customer Account UI extensions available by default in new development shops</title>
    <description><![CDATA[ <div class=""><p>We are ending the developer preview for checkout and customer account UI extensions. With this update:</p>
<ul>
<li>All <strong>new</strong> development shops on the Shopify Plus plan have access to checkout UI extensions</li>
<li>All <strong>new</strong> development shops on all plans have access to customer account UI extensions</li>
<li>All <strong>existing</strong> development shops will not be affected by this change</li>
</ul>
</div> ]]></description>
    <pubDate>Fri, 13 Mar 2026 18:45:00 +0000</pubDate>
    <atom:published>2026-03-13T18:45:00.000Z</atom:published>
    <atom:updated>2026-03-13T18:45:00.000Z</atom:updated>
    <category>Platform</category>
    <category>Update</category>
    <category>2026-01</category>
    <link>https://shopify.dev/changelog/checkout-and-customer-account-ui-extensions-available-by-default-in-new-development-shops</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/checkout-and-customer-account-ui-extensions-available-by-default-in-new-development-shops</guid>
  </item>
  <item>
    <title>Clearer standards for app listing images </title>
    <description><![CDATA[ <div class=""><p>We've updated requirement 4.4.4 and added a new requirement 4.4.5 for Shopify App Store apps.</p>
<p><strong><a href="https://shopify.dev/docs/apps/launch/shopify-app-store/app-store-requirements#provide-clear-focused-images" target="_blank" class="body-link">Requirement 4.4.4</a> now provides clearer standards for image quality:</strong> images should primarily show your app's actual user interface and features. Screenshots must not include desktop backgrounds or browser windows. Feature images and screenshots that solely contain your app logo are not permitted.</p>
<p><strong><a href="https://shopify.dev/docs/apps/launch/shopify-app-store/app-store-requirements#provide-unique-images" target="_blank" class="body-link">New requirement 4.4.5</a> introduces a dedicated standard for image uniqueness:</strong> each image in your app listing must be unique. Screenshots should showcase different features, views, or states of your app. Don't submit duplicate or near-identical images. </p>
<p>If your app listing already uses distinct screenshots showing different parts of your app, no action is required. These requirements will be enforced starting March 26, 2026.</p>
</div> ]]></description>
    <pubDate>Thu, 12 Mar 2026 16:00:00 +0000</pubDate>
    <atom:published>2026-03-12T16:00:00.000Z</atom:published>
    <atom:updated>2026-03-12T16:00:00.000Z</atom:updated>
    <category>Action Required</category>
    <category>App store</category>
    <category>New</category>
    <link>https://shopify.dev/changelog/clearer-standards-for-app-listing-images</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/clearer-standards-for-app-listing-images</guid>
  </item>
  <item>
    <title>`inventorySetScheduledChanges` mutation is being removed with no replacement</title>
    <description><![CDATA[ <div class=""><p>The <a href="https://shopify.dev/docs/api/admin-graphql/unstable/mutations/inventorysetscheduledchanges" target="_blank" class="body-link"><code>inventorySetScheduledChanges</code></a> mutation will be removed from the GraphQL Admin API in version <code>2026-07</code>. This mutation has no replacement, so any apps currently using it should stop relying on it to avoid disruptions.</p>
<p>This change is part of our ongoing efforts to streamline and modernize the inventory management APIs, focusing on more robust and consistent methods for handling inventory updates.</p>
<h3>What you need to do</h3>
<p>Review your app's code for any uses of <code>inventorySetScheduledChanges</code> and remove them. If your app depends on scheduled inventory changes, consider alternative approaches such as using the <a href="https://shopify.dev/docs/api/admin-graphql/unstable/mutations/inventoryadjustquantities" target="_blank" class="body-link"><code>inventoryAdjustQuantities</code></a> mutation for immediate adjustments or integrating with other inventory tools. Refer to the <a href="https://shopify.dev/docs/api/admin-graphql/latest" target="_blank" class="body-link">API reference</a> for available options.</p>
</div> ]]></description>
    <pubDate>Mon, 09 Mar 2026 16:00:00 +0000</pubDate>
    <atom:published>2026-03-09T16:00:00.000Z</atom:published>
    <atom:updated>2026-03-09T16:00:00.000Z</atom:updated>
    <category>Action Required</category>
    <category>API</category>
    <category>Breaking API Change</category>
    <category>Admin GraphQL API</category>
    <category>2026-07</category>
    <link>https://shopify.dev/changelog/inventorysetscheduledchanges-mutation-is-being-removed-with-no-replacement</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/inventorysetscheduledchanges-mutation-is-being-removed-with-no-replacement</guid>
  </item>
  <item>
    <title>Removed Checkout ID from checkout and order webhooks</title>
    <description><![CDATA[ <div class=""><p>To simplify and standardize our checkout references, Shopify has removed the following fields from checkout and orders webhooks. Merchants and partners should update their webhook handlers to use the <code>token</code> or <code>checkout_token</code> fields going forward.</p>
<h2>Checkout webhooks</h2>
<p>The <code>id</code> field has been removed from the following webhook topics:</p>
<ul>
<li><a href="https://shopify.dev/docs/api/webhooks/latest?accordionItem=webhooks-checkouts-create&reference=toml" target="_blank" class="body-link"><code>checkouts/create</code></a></li>
<li><a href="https://shopify.dev/docs/api/webhooks/latest?accordionItem=webhooks-checkouts-update&reference=toml" target="_blank" class="body-link"><code>checkouts/update</code></a></li>
</ul>
<h3>What you need to do</h3>
<p>If you depend on the <code>id</code> field , update your infrastructure to use the <code>token</code> field instead. </p>
<h2>Orders webhooks</h2>
<p>The <code>checkout_id</code> field has been removed from the following webhook topics:  </p>
<ul>
<li><a href="https://shopify.dev/docs/api/webhooks/latest?reference=toml&accordionItem=webhooks-orders-cancelled" target="_blank" class="body-link"><code>orders/cancelled</code></a></li>
<li><a href="https://shopify.dev/docs/api/webhooks/latest?accordionItem=webhooks-orders-create&reference=toml" target="_blank" class="body-link"><code>orders/create</code></a></li>
<li><a href="https://shopify.dev/docs/api/webhooks/latest?reference=toml&accordionItem=webhooks-orders-fulfilled" target="_blank" class="body-link"><code>orders/fulfilled</code></a></li>
<li><a href="https://shopify.dev/docs/api/webhooks/latest?reference=toml&accordionItem=webhooks-orders-link_requested" target="_blank" class="body-link"><code>orders/link_requested</code></a></li>
<li><a href="https://shopify.dev/docs/api/webhooks/latest?reference=toml&accordionItem=webhooks-orders-paid" target="_blank" class="body-link"><code>orders/paid</code></a></li>
<li><a href="https://shopify.dev/docs/api/webhooks/latest?reference=toml&accordionItem=webhooks-orders-partially_fulfilled" target="_blank" class="body-link"><code>orders/partially_fulfilled</code></a></li>
<li><a href="https://shopify.dev/docs/api/webhooks/latest?reference=toml&accordionItem=webhooks-orders-updated" target="_blank" class="body-link"><code>orders/updated</code></a></li>
</ul>
<h3>What you need to do</h3>
<p>If you depend on the  <code>checkout_id</code>  field, update your infrastructure to use the <code>checkout_token</code> field instead. </p>
<h2>Summary</h2>
<p>These changes improves consistency across our APIs and ensure that all integrations reference checkouts using the same identifier. Merchants and partners should update their webhook handlers to use the <code>token</code> or <code>checkout_token</code> fields going forward.</p>
<p>For more details, see the <a href="https://shopify.dev/docs/api/webhooks/latest" target="_blank" class="body-link">public webhook documentation</a>.</p>
</div> ]]></description>
    <pubDate>Fri, 06 Mar 2026 22:30:00 +0000</pubDate>
    <atom:published>2026-03-06T22:30:00.000Z</atom:published>
    <atom:updated>2026-03-06T22:30:00.000Z</atom:updated>
    <category>Action Required</category>
    <category>API</category>
    <category>Breaking API Change</category>
    <category>Events &amp; webhooks</category>
    <category>2026-04</category>
    <link>https://shopify.dev/changelog/removed-checkout-id-from-checkouts-and-orders-webhooks</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/removed-checkout-id-from-checkouts-and-orders-webhooks</guid>
  </item>
  <item>
    <title>Shop Minis February 2026 update</title>
    <description><![CDATA[ <div class=""><h2>New Features</h2>
<p>The following new features are available for Shopify Minis as of February 2026:</p>
<h3>Product Tagging for User-Generated Content</h3>
<p>The <code>useCreateImageContent</code> <a href="https://shopify.dev/docs/api/shop-minis/hooks/content/usecreateimagecontent" target="_blank" class="body-link">hook</a> now supports tagging products directly to user-generated content. Three new parameters provide partners with enhanced control over content creation:</p>
<ul>
<li><code>productIds</code>: Associate one or more products with a piece of content.</li>
<li><code>externalId</code>: Link content to an identifier in your own system.</li>
<li><code>description</code>: Add a text description to content.</li>
</ul>
<pre><code class="language-jsx">import {useCreateImageContent} from '@shopify/shop-minis-react';
const {createImageContent} = useCreateImageContent();
await createImageContent({
  imageUri: 'https://example.com/photo.jpg',
  productIds: [
    'gid://shopify/Product/123',
    'gid://shopify/Product/456',
  ],
  externalId: 'my-content-abc',
  description: 'Styled with our summer collection',
});
</code></pre>
<p>This feature enables shoppable UGC experiences, allowing users browsing content to discover and purchase tagged products directly.</p>
<h3>SafeArea Component and useSafeArea Hook</h3>
<p>A new <code>SafeArea</code> (<a href="https://shopify.dev/docs/api/shop-minis/components/primitives/safearea" target="_blank" class="body-link">documentation</a>) component and <code>useSafeArea</code> (<a href="https://shopify.dev/docs/api/shop-minis/hooks/util/usesafearea" target="_blank" class="body-link">documentation</a>) hook help minis handle device safe area insets. This is especially important for minis that render full-screen or use custom layouts on notched devices.</p>
<pre><code class="language-jsx">import {SafeArea, useSafeArea} from '@shopify/shop-minis-react';

// Option 1: Wrap content in the SafeArea component
function MyMini() {
  return (
    &lt;SafeArea&gt;
      &lt;MyContent /&gt;
    &lt;/SafeArea&gt;
  );
}

// Option 2: Use the hook for manual control
function MyComponent() {
  const {top, bottom, left, right} = useSafeArea();
  return &lt;View style={{paddingTop: top, paddingBottom: bottom}} /&gt;;
}
</code></pre>
<h3>CLI Enable and Disable Commands</h3>
<p>The Shop Minis CLI now includes <code>enable</code> and <code>disable</code> commands for toggling minis directly from the command line. This is useful for testing development minis or managing mini availability during the review process.</p>
<pre><code class="language-bash">npx minis enable
npx minis disable
</code></pre>
<p><a href="https://shopify.dev/docs/api/shop-minis/commands/enable" target="_blank" class="body-link">Additional documentation here</a></p>
<h3>Consent Flow &amp; Scopes</h3>
<ul>
<li><strong>Terms consent toast</strong>: Users see a confirmation toast when accepting terms, improving clarity.</li>
<li><strong>Development mode consent</strong>: The consent dialog now appears in dev mode when a mini requests scopes, facilitating easier testing of the consent flow during development.</li>
<li><strong>Favorite and unfavorite bypass</strong>: Tapping favorite or unfavorite on a mini no longer triggers the consent popup, reducing unnecessary friction.</li>
<li><strong>Removed Consent Scopes</strong>: Unused read scopes have been removed from the platform. Minis that only use <code>ProductCard</code> or <code>ProductLink</code> no longer require the <code>product_list:write</code> scope, reducing the consent burden for simpler minis.</li>
<li><strong>OpenId scope removed</strong>: The <code>openid</code> scope is no longer required for custom backend support. It is only needed if your Mini uses the public user ID (<code>publicId</code>) for personalization or data persistence.</li>
</ul>
<h3>Home Page Quick Link</h3>
<p>Minis are now accessible through a quick link on the Shop App home screen, making it easier for users to discover and browse the Explore section. This enhancement gives minis greater visibility across the app.</p>
<h2>Documentation Updates</h2>
<p>The following documentation updates accompany these changes:</p>
<h3>Manifest File</h3>
<p><a href="https://shopify.dev/docs/api/shop-minis/manifest-file" target="_blank" class="body-link">Updated documentation</a> reflects the removal of legacy read scopes from the manifest file. Partners using removed scopes should update their <code>manifest.json</code> accordingly.</p>
<h3>Custom Backend</h3>
<p>The <a href="https://shopify.dev/docs/api/shop-minis/custom-backend" target="_blank" class="body-link">custom backend guide</a> has been revised with clearer instructions and updated markdown formatting.</p>
<h2>Other Changes</h2>
<ul>
<li>Removed the unused <code>variants</code> field, continuing cleanup from January.</li>
<li>The CLI template no longer includes unnecessary scopes in the default <code>manifest.json</code>.</li>
<li>Development minis can now be queried by UUID before they are enabled, supporting consent checks during development.</li>
</ul>
<h2>Summary</h2>
<p>February focuses on richer content, better developer experience, and reducing friction:</p>
<ol>
<li><strong>Product tagging for UGC</strong>: Tag products directly to user-generated content for shoppable experiences.</li>
<li><strong>SafeArea support</strong>: New component and hook for handling device safe areas in full-screen minis.</li>
<li><strong>CLI enable/disable</strong>: Toggle minis directly from the command line.</li>
<li><strong>Consent improvements</strong>: Smoother consent flow with dev mode support and fewer unnecessary popups.</li>
<li><strong>Scope simplification</strong>: Removed legacy read scopes and reduced consent requirements for simpler minis.</li>
<li><strong>Explore quick link</strong>: Greater visibility for minis on the Shop App home screen.</li>
</ol>
<p>For questions or feedback, reach out to the Shop Minis team or post in the <a href="https://community.shopify.dev/c/shop-minis/33" target="_blank" class="body-link">community forums</a>.</p>
</div> ]]></description>
    <pubDate>Fri, 06 Mar 2026 17:00:00 +0000</pubDate>
    <atom:published>2026-03-06T17:00:00.000Z</atom:published>
    <atom:updated>2026-03-07T01:25:22.000Z</atom:updated>
    <category>API</category>
    <category>Update</category>
    <category>Shop Minis</category>
    <link>https://shopify.dev/changelog/shop-minis-february-2026-update</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/shop-minis-february-2026-update</guid>
  </item>
  <item>
    <title>New analyticsQueryable capability for Metafield Definitions</title>
    <description><![CDATA[ <div class=""><p>The <code>analyticsQueryable</code> capability is now available on the <code>MetafieldDefinition</code> type in the GraphQL Admin API, enabling you to specify whether a metafield can be queried in Shopify Analytics. This enhancement allows merchants to leverage custom metafield values for filtering and grouping data, providing deeper insights into their store's performance.</p>
<p>You can access this capability via the <code>MetafieldDefinition.capabilities</code> field. It can be set during the creation or update of a metafield definition using the <code>metafieldDefinitionCreate</code> and <code>metafieldDefinitionUpdate</code> mutations.</p>
<p>Once enabled, the metafield becomes a dimension and filter in ShopifyQL and Shopify's Analytics, empowering merchants to refine their data analysis. Currently, this functionality supports the following <code>MetafieldDefinition.ownerType</code> values:</p>
<ul>
<li><code>PRODUCT</code></li>
<li><code>PRODUCTVARIANT</code></li>
<li><code>ORDER</code></li>
<li><code>CUSTOMER</code></li>
</ul>
<p><strong>Example: Enabling Analytics Queryable on a New Metafield Definition</strong></p>
<p>The following GraphQL mutation demonstrates how to enable the <code>analyticsQueryable</code> capability for a new metafield definition. This example sets up a metafield for products, allowing it to be used in analytics queries:</p>
<pre><code class="language-graphql">mutation {
  metafieldDefinitionCreate(definition: {
    name: &quot;Fabric&quot;
    namespace: &quot;custom&quot;
    key: &quot;fabric&quot;
    type: &quot;single_line_text_field&quot;
    ownerType: PRODUCT
    capabilities: {
      analyticsQueryable: { enabled: true }
    }
  }) {
    createdDefinition {
      id
      capabilities {
        analyticsQueryable {
          enabled
        }
      }
    }
    userErrors {
      field
      message
    }
  }
}
</code></pre>
<p>This mutation creates a new metafield definition with the <code>analyticsQueryable</code> capability enabled, making it available for use in Shopify Analytics.</p>
</div> ]]></description>
    <pubDate>Thu, 05 Mar 2026 17:00:00 +0000</pubDate>
    <atom:published>2026-03-05T17:00:00.000Z</atom:published>
    <atom:updated>2026-03-05T17:00:00.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <category>Admin GraphQL API</category>
    <category>2026-04</category>
    <link>https://shopify.dev/changelog/new-analyticsqueryable-capability-for-metafield-definitions</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/new-analyticsqueryable-capability-for-metafield-definitions</guid>
  </item>
  <item>
    <title>Enhanced discounts support in the Shopify Functions Cart</title>
    <description><![CDATA[ <div class=""><p>As of GraphQL API version <code>2026-04</code>, Shopify Functions can now access detailed discount information at three levels:</p>
<ol>
<li><strong>Cart-level</strong>: All discount applications on the cart.</li>
<li><strong>Line item-level</strong>: Discounts allocated to specific line items.</li>
<li><strong>Delivery-level</strong>: Discounts allocated to delivery groups.</li>
</ol>
<p>Based on the <a href="https://shopify.dev/docs/api/functions/2026-04#function-execution-order-in-checkout" target="_blank" class="body-link">function execution order</a>, only functions that execute after discounts can see complete discount information. </p>
<p>Learn more about <a href="https://shopify.dev/docs/api/functions/2026-04#graphql-schema-and-versioning" target="_blank" class="body-link">function inputs</a>.</p>
</div> ]]></description>
    <pubDate>Mon, 02 Mar 2026 17:00:00 +0000</pubDate>
    <atom:published>2026-03-02T17:00:00.000Z</atom:published>
    <atom:updated>2026-03-02T17:00:00.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <category>Functions</category>
    <category>2026-04</category>
    <link>https://shopify.dev/changelog/enhanced-discounts-support-in-the-shopify-functions-cart</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/enhanced-discounts-support-in-the-shopify-functions-cart</guid>
  </item>
  <item>
    <title>Bare query strings no longer bust the cache for assets</title>
    <description><![CDATA[ <div class=""><h2>Action required</h2>
<p>We're enhancing Shopify's asset caching to improve load times. As part of this update, we are modifying the URL query parameters recognized for cache busting.</p>
<p>Effective March 24, 2026, bare query strings (a <code>?</code> followed by a value with no key) will not refresh cached assets. Previously, these strings appeared to refresh assets because altering the URL could bypass the cache; this incidental behavior will be discontinued.</p>
<p>If your asset URLs are generated with Liquid filters (such as <code>asset_url</code>), you’re already compatible—no changes are necessary.</p>
<h2>What’s changing</h2>
<p>Referencing assets (e.g., images, fonts) with a URL containing a bare query string will no longer refresh the cached asset when the value is updated.</p>
<p>For example:</p>
<pre><code>image.png?123
</code></pre>
<p>The same applies within CSS:</p>
<pre><code class="language-css">background-image: url('image.png?123');
</code></pre>
<h2>What to do</h2>
<p>Use the appropriate Liquid filter to generate URLs (e.g., <code>asset_url</code>, <code>file_url</code>). Shopify handles versioning and updates the URL automatically whenever the asset changes.</p>
<p>In templates:</p>
<pre><code class="language-liquid">{{ 'image.png' | asset_url }}
</code></pre>
<p>This outputs a URL with a version parameter:</p>
<pre><code>image.png?v=1384022871
</code></pre>
<p>In CSS, use a <code>.css.liquid</code> file to incorporate Liquid:</p>
<pre><code class="language-css">background-image: url('{{ &quot;image.png&quot; | asset_url }}');
</code></pre>
<h2>Why this matters</h2>
<p>Continuing to use bare query strings may result in stale assets being served until the cache expires. Using Liquid filters ensures that the correct, current version of each asset is delivered, enhancing performance by enabling more effective CDN and browser caching.</p>
<h2>Learn more</h2>
<ul>
<li><a href="https://shopify.dev/docs/api/liquid/filters/asset_url" target="_blank" class="body-link">asset_url</a> filter</li>
<li><a href="https://shopify.dev/docs/api/liquid/filters/file_url" target="_blank" class="body-link">file_url</a> filter</li>
<li><a href="https://shopify.dev/docs/storefronts/themes/best-practices/performance/platform#css-syntax-to-ensure-automatic-updates" target="_blank" class="body-link">CSS syntax to ensure automatic updates</a></li>
</ul>
</div> ]]></description>
    <pubDate>Mon, 02 Mar 2026 14:15:00 +0000</pubDate>
    <atom:published>2026-03-02T14:15:00.000Z</atom:published>
    <atom:updated>2026-03-02T14:15:00.000Z</atom:updated>
    <category>Action Required</category>
    <category>Themes</category>
    <category>New</category>
    <link>https://shopify.dev/changelog/bare-query-strings-no-longer-bust-the-cache-for-assets</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/bare-query-strings-no-longer-bust-the-cache-for-assets</guid>
  </item>
  <item>
    <title>Updates effective February 27 to our Partner Program Agreement and API License and Terms of Use</title>
    <description><![CDATA[ <div class=""><p>Effective Friday, February 27, 2026, <strong>Action Required</strong></p>
<p>We have updated our <a href="https://www.shopify.ca/partners/terms?shpxid=823b80d5-C747-48F6-6CF0-832254EC6F4B" target="_blank" class="body-link">Partner Program Agreement</a> and <a href="https://www.shopify.com/legal/api-terms?shpxid=823b80d5-C747-48F6-6CF0-832254EC6F4B" target="_blank" class="body-link">API License and Terms of Use</a>. These changes clarify roles, enhance data protection, and support new platform features.</p>
<p>By continuing to use Shopify services on or after February 27, 2026, you confirm that you have read, understood, and accepted these new terms.</p>
<p>For more information and frequently asked questions, please visit the <a href="https://help.shopify.com/en/partners/ppa-api-faq?shpxid=823b80d5-C747-48F6-6CF0-832254EC6F4B" target="_blank" class="body-link">Shopify Help Center</a>.</p>
</div> ]]></description>
    <pubDate>Fri, 27 Feb 2026 20:00:00 +0000</pubDate>
    <atom:published>2026-02-27T20:00:00.000Z</atom:published>
    <atom:updated>2026-02-27T20:00:00.000Z</atom:updated>
    <category>App store</category>
    <category>Update</category>
    <link>https://shopify.dev/changelog/updates-effective-february-27-to-our-partner-program-agreement-and-api-license-and-terms-of-use</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/updates-effective-february-27-to-our-partner-program-agreement-and-api-license-and-terms-of-use</guid>
  </item>
  <item>
    <title>Accelerated checkouts now support multiple product variants on the product page</title>
    <description><![CDATA[ <div class=""><p>Accelerated checkout now supports adding multiple product variants from the product page. Theme devs can include additional items alongside the main product (for example, a TV and its warranty), allowing customers to purchase products and their add-ons using accelerated checkout</p>
<p>Learn more in our <a href="https://shopify.dev/docs/storefronts/themes/pricing-payments/accelerated-checkout/multiple-product-checkout" target="_blank" class="body-link">dev docs</a>. </p>
</div> ]]></description>
    <pubDate>Fri, 27 Feb 2026 15:52:00 +0000</pubDate>
    <atom:published>2026-02-27T15:52:00.000Z</atom:published>
    <atom:updated>2026-02-27T15:52:00.000Z</atom:updated>
    <category>Tools</category>
    <category>New</category>
    <link>https://shopify.dev/changelog/accelerated-checkout-now-supports-addons-from-the-product-page</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/accelerated-checkout-now-supports-addons-from-the-product-page</guid>
  </item>
  <item>
    <title>Legacy customer accounts are now deprecated</title>
    <description><![CDATA[ <div class=""><p>Legacy customer accounts are no longer available to new stores and existing stores not using it. Shopify will stop providing feature updates and technical support for this older version. </p>
<p>A final sunset date for legacy customer accounts will be announced later in 2026. We strongly recommend that merchants <a href="https://help.shopify.com/en/manual/customers/customer-accounts/upgrade" target="_blank" class="body-link">upgrade</a> their customer accounts ahead of the deadline.</p>
<h2>If you build themes</h2>
<p>Theme developers should no longer include legacy customer account liquid files. Any store that is on legacy customer accounts, that upgrades to a theme without the legacy files, will automatically be upgraded to the latest version of customer accounts. </p>
<p>Simplify customer account implementation across your themes with our new <a href="https://shopify.dev/docs/storefronts/themes/customer-engagement/account-component" target="_blank" class="body-link">shopify-account web component</a> that automatically redirects to the latest version of customer accounts. </p>
<h2>If you build apps</h2>
<p>Developers can use Shopify Extensions to develop apps that customize and extend customer accounts in a way that does not require customizing liquid templates. If your app relies on legacy customer account liquid pages, it won’t work for merchants on the latest version of customer accounts.</p>
<p>With <a href="https://shopify.dev/docs/api/customer-account-ui-extensions/latest" target="_blank" class="body-link">customer account UI extensions</a>, you can enhance native pages like order status, order list, profile, and even build unique full-page experiences. <a href="https://apps.shopify.com/extensions/customer-account" target="_blank" class="body-link">800+ apps</a> have already made the switch. <a href="https://shopify.dev/docs/apps/build/customer-accounts" target="_blank" class="body-link">Build your first customer account extension</a> now and put your app in front of over 70% of Shopify merchants (and growing) already using customer accounts.</p>
<h2>If you build custom storefronts</h2>
<p>Use the <a href="https://shopify.dev/docs/api/customer/latest" target="_blank" class="body-link">Customer Account API</a> as your source for customer-scoped data and authenticated customer actions in order to create the most secure customer experiences. </p>
<p>If you build custom storefronts or apps that currently use Storefront API customer-scoped mutations, we recommend switching to the Customer Account API as soon as possible.</p>
</div> ]]></description>
    <pubDate>Thu, 26 Feb 2026 15:15:00 +0000</pubDate>
    <atom:published>2026-02-26T15:15:00.000Z</atom:published>
    <atom:updated>2026-02-26T15:50:34.000Z</atom:updated>
    <category>Platform</category>
    <category>Deprecation announcement</category>
    <link>https://shopify.dev/changelog/legacy-customer-accounts-are-deprecated</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/legacy-customer-accounts-are-deprecated</guid>
  </item>
  <item>
    <title>Support for market-aware auth URLs in Customer Account API </title>
    <description><![CDATA[ <div class=""><p>You can now pass <code>locale</code> and <code>region_country</code> parameters to the Customer Account API authorization endpoint to build<br> market-aware login experiences in headless storefronts.</p>
<p>Liquid storefronts handle this automatically with <code>{{ routes.account_login_url }}</code>, but headless storefronts previously had no
documented way to construct login URLs that respect market context. We've added documentation and support for two optional<br>authorization parameters:                                                                                                     </p>
<ul>
<li><strong><a href="https://shopify.dev/docs/api/customer#authorization" target="_blank" class="body-link"><code>locale</code></a></strong>: Controls the language of the login screen. Supports regional variants like <code>fr-CA</code> and <code>en-GB</code>, which load market-specific translations set through Translate &amp; Adapt.</li>
<li><strong><a href="https://shopify.dev/docs/api/customer#authorization" target="_blank" class="body-link"><code>region_country</code></a></strong>: Controls the market context for policies, branding, and other non-translation content. Uses an ISO 3166-1 Alpha-2 country code.</li>
</ul>
<p>These parameters can be used independently or together for a fully localized login experience.</p>
<p>Learn more about <a href="https://shopify.dev/docs/storefronts/headless/building-with-the-customer-account-api/market-aware-auth-urls" target="_blank" class="body-link">building market-aware auth URLs for headless stores</a>. For the full list of authorization parameters, refer to the <a href="https://shopify.dev/docs/api/customer#authorization" target="_blank" class="body-link">Customer Account API authorization reference</a>.</p>
</div> ]]></description>
    <pubDate>Tue, 24 Feb 2026 17:00:00 +0000</pubDate>
    <atom:published>2026-02-24T17:00:00.000Z</atom:published>
    <atom:updated>2026-03-02T14:37:40.000Z</atom:updated>
    <category>API</category>
    <category>Update</category>
    <category>Customer Account API</category>
    <link>https://shopify.dev/changelog/support-for-market-aware-auth-urls-in-customer-account-api</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/support-for-market-aware-auth-urls-in-customer-account-api</guid>
  </item>
  <item>
    <title>New APIs to read and write shipping options in delivery profile</title>
    <description><![CDATA[ <div class=""><p>As part of the enhanced UI for creating shipping options, a shipping option can now include multiple tiered rates grouped together.</p>
<p>If your app integrates with delivery profiles and uses <a href="https://shopify.dev/docs/api/admin-graphql/unstable/objects/DeliveryMethodDefinition" target="_blank" class="body-link"><code>DeliveryMethodDefinition</code></a> and <a href="https://shopify.dev/docs/api/admin-graphql/unstable/input-objects/DeliveryMethodDefinitionInput" target="_blank" class="body-link"><code>DeliveryMethodDefinitionInput</code></a> to manage shipping options, then evaluate if you need to transition to the new APIs in the unstable version:</p>
<ul>
<li>If your app reads merchant-managed <code>DeliveryProfile</code>, you might need to migrate to the new read API. Refer to the [Read API](#Read API) and <a href="#backwards-compatibility-for-queries" target="_blank" class="body-link">backwards compatibility</a> sections.</li>
<li>If your app writes merchant-managed  <code>DeliveryProfile</code>, then you must migrate to the new write API to avoid unexpected behaviour. Refer to the [Write API](#Write API) section.</li>
<li>If your app reads and/or writes app-managed <code>DeliveryProfile</code>, then no action is needed.</li>
</ul>
<p><strong>Glossary:</strong></p>
<ul>
<li>Merchant-managed  <code>DeliveryProfile</code>: Shipping profiles that merchants create and edit in the Shopify admin.</li>
<li>App-managed  <code>DeliveryProfile</code>: Shipping profiles that the app creates and edits.</li>
</ul>
<p>This guide outlines the new GraphQL fields and input types for managing shipping options within shipping profiles.</p>
<h2>What's changed?</h2>
<h3>Read API</h3>
<p>We're introducing the <a href="https://shopify.dev/docs/api/admin-graphql/unstable/objects/DeliveryMethodDefinition#field-DeliveryMethodDefinition.fields.rateGroups" target="_blank" class="body-link"><code>DeliveryMethodDefinition.rateGroups</code></a> and <a href="https://shopify.dev/docs/api/admin-graphql/unstable/objects/DeliveryRateDefinition#field-DeliveryRateDefinition.fields.conditions" target="_blank" class="body-link"><code>DeliveryRateDefinition.conditions</code></a> fields. These replace the legacy <a href="https://shopify.dev/docs/api/admin-graphql/unstable/objects/DeliveryMethodDefinition#field-DeliveryMethodDefinition.fields.rateProvider" target="_blank" class="body-link"><code>DeliveryMethodDefinition.rateProvider</code></a> and <a href="https://shopify.dev/docs/api/admin-graphql/unstable/objects/DeliveryMethodDefinition#field-DeliveryMethodDefinition.fields.methodConditions" target="_blank" class="body-link"><code>DeliveryMethodDefinition.methodConditions</code></a> fields.</p>
<p>To prevent unexpected behavior, migrate to these new fields. Refer to the <a href="#how-to-query-shipping-options" target="_blank" class="body-link">example query</a> to learn how to use these fields to fetch a <code>DeliveryMethodDefinition</code>.</p>
<p>The legacy fields are scheduled for deprecation. For details on their current behavior, see <a href="#backward-compatibility-for-queries" target="_blank" class="body-link">backward compatibility for queries</a>.</p>
<h3>Write API</h3>
<p>The following new input fields have been added to <a href="https://shopify.dev/docs/api/admin-graphql/unstable/input-objects/DeliveryMethodDefinitionInput" target="_blank" class="body-link"><code>DeliveryMethodDefinitionInput</code></a>: 
*<a href="https://shopify.dev/docs/api/admin-graphql/unstable/input-objects/DeliveryMethodDefinitionInput#fields-priceConditionsToCreate" target="_blank" class="body-link"> <code>rateGroupsToCreate</code></a></p>
<ul>
<li><a href="https://shopify.dev/docs/api/admin-graphql/unstable/input-objects/DeliveryMethodDefinitionInput#fields-rateGroupsToUpdate" target="_blank" class="body-link"><code>rateGroupsToUpdate</code></a></li>
<li><a href="https://shopify.dev/docs/api/admin-graphql/unstable/input-objects/DeliveryMethodDefinitionInput#fields-freeConditions" target="_blank" class="body-link"><code>freeConditions</code></a></li>
<li><a href="https://shopify.dev/docs/api/admin-graphql/unstable/input-objects/DeliveryMethodDefinitionInput#fields-currencyCode" target="_blank" class="body-link"><code>currencyCode</code> </a></li>
</ul>
<p>The following legacy fields will become obsolete when merchants start using multiple tiered rates:</p>
<ul>
<li><a href="https://shopify.dev/docs/api/admin-graphql/unstable/input-objects/DeliveryMethodDefinitionInput#fields-participant" target="_blank" class="body-link"><code>DeliveryMethodDefinitionInput.participant</code></a></li>
<li><a href="https://shopify.dev/docs/api/admin-graphql/unstable/input-objects/DeliveryMethodDefinitionInput#fields-rateDefinition" target="_blank" class="body-link"><code>DeliveryMethodDefinitionInput.rateDefinition</code></a></li>
<li><a href="https://shopify.dev/docs/api/admin-graphql/unstable/input-objects/DeliveryMethodDefinitionInput#fields-priceConditionsToCreate" target="_blank" class="body-link"><code>DeliveryMethodDefinitionInput.priceConditionsToCreate</code></a></li>
<li><a href="https://shopify.dev/docs/api/admin-graphql/unstable/input-objects/DeliveryMethodDefinitionInput#fields-weightConditionsToCreate" target="_blank" class="body-link"><code>DeliveryMethodDefinitionInput.weightConditionsToCreate</code></a> .</li>
</ul>
<p>To learn how to update a <code>DeliveryMethodDefinition</code> using the new fields, see the <a href="#how-to-create-and-update-shipping-options" target="_blank" class="body-link">example mutation</a></p>
<h2>Examples</h2>
<h3>How to query shipping options</h3>
<pre><code class="language-graphql">query DeliveryProfile {
  deliveryProfile(id: &quot;gid://shopify/DeliveryProfile/123&quot;) {
    profileLocationGroups {
      locationGroup {
        id
      }
      locationGroupZones(first: 10) {
        edges {
          node {
            methodDefinitions(first: 10) {
              edges {
                node {
                  id
                  name
                  description
                  active
                  currencyCode
                  rateGroups(first: 10) {
                    edges {
                      node {
                        id
                        rateProviders(first: 10) {
                          edges {
                            node {
                              ... on DeliveryRateDefinition {
                                id
                                price {
                                  amount
                                  currencyCode
                                }
                                minTransitTime
                                maxTransitTime
                                conditions {
                                  subject
                                  min {
                                    ... on MoneyV2 {
                                      amount
                                      currencyCode
                                    }
                                    ... on Weight {
                                      value
                                      unit
                                    }
                                  }
                                  max {
                                    ... on MoneyV2 {
                                      amount
                                      currencyCode
                                    }
                                    ... on Weight {
                                      value
                                      unit
                                    }
                                  }
                                }
                              }
                              ... on DeliveryParticipant {
                                id
                                carrierService {
                                  id
                                  name
                                }
                                fixedFee {
                                  amount
                                  currencyCode
                                }
                                percentageOfRateFee
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                  freeConditions {
                    subject
                    min {
                      ... on MoneyV2 {
                        amount
                        currencyCode
                      }
                      ... on Weight {
                        value
                        unit
                      }
                    }
                    max {
                      ... on MoneyV2 {
                        amount
                        currencyCode
                      }
                      ... on Weight {
                        value
                        unit
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}
</code></pre>
<h3>How to create and update shipping options</h3>
<p>For the <a href="https://shopify.dev/docs/api/admin-graphql/unstable/mutations/deliveryProfileCreate" target="_blank" class="body-link"><code>deliveryProfileCreate</code></a> and <a href="https://shopify.dev/docs/api/admin-graphql/unstable/mutations/deliveryProfileUpdate" target="_blank" class="body-link"><code>deliveryProfileUpdate</code></a> mutations, the following new input fields are added to <code>DeliveryMethodDefinitionInput</code>: </p>
<ul>
<li><code>rateGroupsToCreate</code></li>
<li><code>rateGroupsToUpdate</code></li>
<li><code>freeConditions</code></li>
<li><code>currencyCode</code></li>
</ul>
<p>Here's how to update a shipping option using the new input fields:</p>
<pre><code class="language-graphql">mutation ProfileUpdate {
  deliveryProfileUpdate(
    id: &quot;gid://shopify/DeliveryProfile/123&quot;
    profile: {
      profileLocationGroups: [
        {
          id: &quot;gid://shopify/DeliveryProfileLocationGroup/456&quot;
          zonesToUpdate: [
            {
              id: &quot;gid://shopify/DeliveryLocationGroupZone/789&quot;
              methodDefinitionsToUpdate: [
                {
                  id: &quot;gid://shopify/DeliveryMethodDefinition/321&quot;
                  rateGroupsToUpdate: [
                    {
                      id: &quot;gid://shopify/DeliveryRateGroup/555&quot;
                      rateDefinitionsToUpdate: [
                        {
                          id: &quot;gid://shopify/DeliveryRateDefinition/666&quot;
                          price: {
                            amount: 7.50
                            currencyCode: USD
                          }
                          minTransitTime: 172800
                        }
                      ]
                      rateDefinitionsToDelete: [
                        &quot;gid://shopify/DeliveryRateDefinition/777&quot;
                      ]
                      rateDefinitionsToCreate: [
                        {
                          price: {
                            amount: 15.00
                            currencyCode: USD
                          }
                          conditions: [
                            {
                              subject: PACKAGE_WEIGHT
                              min: 20.0
                              unit: &quot;kg&quot;
                            }
                          ]
                        }
                      ]
                    }
                  ]
                }
              ]
            }
          ]
        }
      ]
    }
  ) {
    profile {
      id
    }
    userErrors {
      field
      message
    }
  }
}
</code></pre>
<h3>Backwards compatibility for queries</h3>
<p>The <code>DeliveryMethodDefinition.rateProvider</code> and <code>DeliveryMethodDefinition.methodConditions</code> fields will continue to be supported temporarily to facilitate a smooth transition.</p>
<p>When using the legacy API:</p>
<ul>
<li>If a method definition includes multiple rate definitions, then each additional rate is represented as a separate method definition with its own <code>rateProvider</code> and <code>methodConditions</code>.</li>
<li>Free conditions are represented as separate method definitions with a zero-price rate definition as the <code>rateProvider</code>.</li>
</ul>
<p>For example, a method definition with three rate definitions and a free condition will yield different results in the new and legacy APIs. The <a href="https://shopify.dev/docs/api/admin-graphql/latest/objects/DeliveryProfile#field-DeliveryProfile.fields.activeMethodDefinitionsCount" target="_blank" class="body-link"><code>activeMethodDefinitionsCount</code></a> and <a href="https://shopify.dev/docs/api/admin-graphql/unstable/objects/DeliveryLocationGroupZone#field-DeliveryLocationGroupZone.fields.methodDefinitionCounts" target="_blank" class="body-link"><code>methodDefinitionCounts</code></a> will reflect these differences.</p>
<p><strong>New API response</strong></p>
<pre><code class="language-json">{
  &quot;data&quot;: {
    &quot;node&quot;: {
      &quot;activeMethodDefinitionsCount&quot;: 1,
      &quot;profileLocationGroups&quot;: [
        {
          &quot;locationGroupZones&quot;: {
            &quot;nodes&quot;: [
              {
                &quot;methodDefinitionCounts&quot;: {
                  &quot;rateDefinitionsCount&quot;: 1,
                  &quot;participantDefinitionsCount&quot;: 0
                },
                &quot;methodDefinitions&quot;: {
                  &quot;nodes&quot;: [
                    {
                      &quot;id&quot;: &quot;gid://shopify/DeliveryMethodDefinition/825837944888&quot;,
                      &quot;name&quot;: &quot;Standard&quot;,
                      &quot;rateGroups&quot;: {
                        &quot;nodes&quot;: [
                          {
                            &quot;rateProviders&quot;: {
                              &quot;nodes&quot;: [
                                {
                                  &quot;id&quot;: &quot;gid://shopify/DeliveryRateDefinition/760813584440&quot;,
                                  &quot;price&quot;: {
                                    &quot;amount&quot;: &quot;10.0&quot;,
                                    &quot;currencyCode&quot;: &quot;CAD&quot;
                                  },
                                  &quot;conditions&quot;: [
                                    {
                                      &quot;subject&quot;: &quot;PACKAGE_WEIGHT&quot;,
                                      &quot;min&quot;: {
                                        &quot;value&quot;: 0,
                                        &quot;unit&quot;: &quot;KILOGRAMS&quot;
                                      },
                                      &quot;max&quot;: {
                                        &quot;value&quot;: 10,
                                        &quot;unit&quot;: &quot;KILOGRAMS&quot;
                                      }
                                    }
                                  ]
                                },
                                {
                                  &quot;id&quot;: &quot;gid://shopify/DeliveryRateDefinition/760813617208&quot;,
                                  &quot;price&quot;: {
                                    &quot;amount&quot;: &quot;20.0&quot;,
                                    &quot;currencyCode&quot;: &quot;CAD&quot;
                                  },
                                  &quot;conditions&quot;: [
                                    {
                                      &quot;subject&quot;: &quot;PACKAGE_WEIGHT&quot;,
                                      &quot;min&quot;: {
                                        &quot;value&quot;: 10.0001,
                                        &quot;unit&quot;: &quot;KILOGRAMS&quot;
                                      },
                                      &quot;max&quot;: {
                                        &quot;value&quot;: 20,
                                        &quot;unit&quot;: &quot;KILOGRAMS&quot;
                                      }
                                    }
                                  ]
                                },
                                {
                                  &quot;id&quot;: &quot;gid://shopify/DeliveryRateDefinition/760813649976&quot;,
                                  &quot;price&quot;: {
                                    &quot;amount&quot;: &quot;30.0&quot;,
                                    &quot;currencyCode&quot;: &quot;CAD&quot;
                                  },
                                  &quot;conditions&quot;: [
                                    {
                                      &quot;subject&quot;: &quot;PACKAGE_WEIGHT&quot;,
                                      &quot;min&quot;: {
                                        &quot;value&quot;: 20.0001,
                                        &quot;unit&quot;: &quot;KILOGRAMS&quot;
                                      },
                                      &quot;max&quot;: null
                                    }
                                  ]
                                }
                              ]
                            }
                          }
                        ]
                      },
                      &quot;freeShippingConditions&quot;: [
                        {
                          &quot;min&quot;: {
                            &quot;amount&quot;: &quot;100.0&quot;,
                            &quot;currencyCode&quot;: &quot;CAD&quot;
                          }
                        }
                      ]
                    }
                  ]
                }
              }
            ]
          }
        }
      ]
    }
  }
}
</code></pre>
<p><strong>Legacy API response</strong></p>
<p>With the legacy API, you receive multiple method definitions, one for each rate definition and one for the free condition:</p>
<pre><code class="language-json">{
  &quot;data&quot;: {
    &quot;node&quot;: {
      &quot;activeMethodDefinitionsCount&quot;: 4,
      &quot;profileLocationGroups&quot;: [
        {
          &quot;locationGroupZones&quot;: {
            &quot;nodes&quot;: [
              {
                &quot;methodDefinitionCounts&quot;: {
                  &quot;rateDefinitionsCount&quot;: 4,
                  &quot;participantDefinitionsCount&quot;: 0
                },
                &quot;methodDefinitions&quot;: {
                  &quot;nodes&quot;: [
                    {
                      &quot;id&quot;: &quot;gid://shopify/DeliveryMethodDefinition/825837944888&quot;,
                      &quot;name&quot;: &quot;Standard&quot;,
                      &quot;rateProvider&quot;: {
                        &quot;__typename&quot;: &quot;DeliveryRateDefinition&quot;,
                        &quot;id&quot;: &quot;gid://shopify/DeliveryRateDefinition/760813584440&quot;,
                        &quot;price&quot;: {
                          &quot;amount&quot;: &quot;10.0&quot;,
                          &quot;currencyCode&quot;: &quot;CAD&quot;
                        }
                      },
                      &quot;methodConditions&quot;: [
                        {
                          &quot;id&quot;: &quot;gid://shopify/DeliveryCondition/21530181688?operator=greater_than_or_equal_to&quot;,
                          &quot;field&quot;: &quot;TOTAL_WEIGHT&quot;,
                          &quot;conditionCriteria&quot;: {
                            &quot;value&quot;: 0,
                            &quot;unit&quot;: &quot;KILOGRAMS&quot;
                          }
                        },
                        {
                          &quot;id&quot;: &quot;gid://shopify/DeliveryCondition/21530181688?operator=less_than_or_equal_to&quot;,
                          &quot;field&quot;: &quot;TOTAL_WEIGHT&quot;,
                          &quot;conditionCriteria&quot;: {
                            &quot;value&quot;: 10,
                            &quot;unit&quot;: &quot;KILOGRAMS&quot;
                          }
                        }
                      ]
                    },
                    {
                      &quot;id&quot;: &quot;gid://shopify/DeliveryMethodDefinition/825837944888?source=RateDefinition&amp;source_id=760813617208&quot;,
                      &quot;name&quot;: &quot;Standard&quot;,
                      &quot;rateProvider&quot;: {
                        &quot;__typename&quot;: &quot;DeliveryRateDefinition&quot;,
                        &quot;id&quot;: &quot;gid://shopify/DeliveryRateDefinition/760813617208&quot;,
                        &quot;price&quot;: {
                          &quot;amount&quot;: &quot;20.0&quot;,
                          &quot;currencyCode&quot;: &quot;CAD&quot;
                        }
                      },
                      &quot;methodConditions&quot;: [
                        {
                          &quot;id&quot;: &quot;gid://shopify/DeliveryCondition/21530214456?operator=greater_than_or_equal_to&quot;,
                          &quot;field&quot;: &quot;TOTAL_WEIGHT&quot;,
                          &quot;conditionCriteria&quot;: {
                            &quot;value&quot;: 10.0001,
                            &quot;unit&quot;: &quot;KILOGRAMS&quot;
                          }
                        },
                        {
                          &quot;id&quot;: &quot;gid://shopify/DeliveryCondition/21530214456?operator=less_than_or_equal_to&quot;,
                          &quot;field&quot;: &quot;TOTAL_WEIGHT&quot;,
                          &quot;conditionCriteria&quot;: {
                            &quot;value&quot;: 20,
                            &quot;unit&quot;: &quot;KILOGRAMS&quot;
                          }
                        }
                      ]
                    },
                    {
                      &quot;id&quot;: &quot;gid://shopify/DeliveryMethodDefinition/825837944888?source=RateDefinition&amp;source_id=760813649976&quot;,
                      &quot;name&quot;: &quot;Standard&quot;,
                      &quot;rateProvider&quot;: {
                        &quot;__typename&quot;: &quot;DeliveryRateDefinition&quot;,
                        &quot;id&quot;: &quot;gid://shopify/DeliveryRateDefinition/760813649976&quot;,
                        &quot;price&quot;: {
                          &quot;amount&quot;: &quot;30.0&quot;,
                          &quot;currencyCode&quot;: &quot;CAD&quot;
                        }
                      },
                      &quot;methodConditions&quot;: [
                        {
                          &quot;id&quot;: &quot;gid://shopify/DeliveryCondition/21530247224?operator=greater_than_or_equal_to&quot;,
                          &quot;field&quot;: &quot;TOTAL_WEIGHT&quot;,
                          &quot;conditionCriteria&quot;: {
                            &quot;value&quot;: 20.0001,
                            &quot;unit&quot;: &quot;KILOGRAMS&quot;
                          }
                        }
                      ]
                    },
                    {
                      &quot;id&quot;: &quot;gid://shopify/DeliveryMethodDefinition/825837944888?source=RateRangeCondition&amp;source_id=21530279992&quot;,
                      &quot;name&quot;: &quot;Standard&quot;,
                      &quot;rateProvider&quot;: {
                        &quot;__typename&quot;: &quot;DeliveryRateDefinition&quot;,
                        &quot;id&quot;: &quot;gid://shopify/DeliveryRateDefinition/0?source=RateRangeCondition&amp;source_id=21530279992&quot;,
                        &quot;price&quot;: {
                          &quot;amount&quot;: &quot;0.0&quot;,
                          &quot;currencyCode&quot;: &quot;CAD&quot;
                        }
                      },
                      &quot;methodConditions&quot;: [
                        {
                          &quot;id&quot;: &quot;gid://shopify/DeliveryCondition/21530279992?operator=greater_than_or_equal_to&quot;,
                          &quot;field&quot;: &quot;TOTAL_PRICE&quot;,
                          &quot;conditionCriteria&quot;: {
                            &quot;amount&quot;: &quot;100.0&quot;,
                            &quot;currencyCode&quot;: &quot;CAD&quot;
                          }
                        }
                      ]
                    }
                  ]
                }
              }
            ]
          }
        }
      ]
    }
  }
}
</code></pre>
</div> ]]></description>
    <pubDate>Tue, 24 Feb 2026 15:35:00 +0000</pubDate>
    <atom:published>2026-02-24T15:35:00.000Z</atom:published>
    <atom:updated>2026-02-24T15:35:19.000Z</atom:updated>
    <category>Action Required</category>
    <category>API</category>
    <category>Breaking API Change</category>
    <category>Admin GraphQL API</category>
    <link>https://shopify.dev/changelog/new-apis-to-read-and-write-shipping-options-in-delivery-profile</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/new-apis-to-read-and-write-shipping-options-in-delivery-profile</guid>
  </item>
  <item>
    <title>Manage dev previews on your dev store without leaving admin</title>
    <description><![CDATA[ <div class=""><p>As of Shopify CLI 3.91, the Dev Console has been updated to show all active <code>dev</code> previews and their extensions, right in the admin. You can now see information on the developer who created the preview, and when it was last updated. Additionally, the Dev Console allows you to:</p>
<ul>
<li>Access preview links for your app and extensions  </li>
<li>Open QR codes for mobile testing  </li>
<li>Clean up <code>dev</code> previews that are no longer in use  </li>
<li>Open your app on the Dev Dashboard</li>
</ul>
<p>The Dev Console is available for your app when running <code>shopify app dev</code> and opening the admin. For more information, see the <a href="https://shopify.dev/docs/apps/build/cli-for-apps/test-apps-locally" target="_blank" class="body-link">app testing documentation</a>.</p>
</div> ]]></description>
    <pubDate>Tue, 24 Feb 2026 13:30:00 +0000</pubDate>
    <atom:published>2026-02-24T13:30:00.000Z</atom:published>
    <atom:updated>2026-02-24T13:30:00.000Z</atom:updated>
    <category>Tools</category>
    <category>Update</category>
    <link>https://shopify.dev/changelog/manage-dev-previews-on-your-dev-store-without-leaving-admin</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/manage-dev-previews-on-your-dev-store-without-leaving-admin</guid>
  </item>
  <item>
    <title>Subscriptions APIs: Introduce SubscriptionBillingAttemptState</title>
    <description><![CDATA[ <div class=""><p>As of April 2026, you now have access to the <code>SubscriptionBillingAttemptState</code> field in the GraphQL Admin API. This new field replaces several loosely-typed nullable fields with a discriminated union pattern, enhancing the API's ergonomics and self-documentation.</p>
<p>| Deprecated Field | New Equivalent | Notes |
| </p>
</div> ]]></description>
    <pubDate>Mon, 23 Feb 2026 17:00:00 +0000</pubDate>
    <atom:published>2026-02-23T17:00:00.000Z</atom:published>
    <atom:updated>2026-02-23T17:00:00.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <category>Admin GraphQL API</category>
    <category>2026-04</category>
    <link>https://shopify.dev/changelog/subscriptions-apis-introduce-subscriptionbillingattemptstate</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/subscriptions-apis-introduce-subscriptionbillingattemptstate</guid>
  </item>
  <item>
    <title>New rejection reason codes and merchant message added to `verificationSessionReject` mutation</title>
    <description><![CDATA[ <div class=""><p>The <a href="https://shopify.dev/docs/api/payments-apps/latest/mutations/verificationSessionReject" target="_blank" class="body-link"><code>verificationSessionReject</code> mutation</a> in the Payments Apps API now supports two new rejection reason codes and an optional merchant-facing message. The <a href="https://shopify.dev/docs/api/payments-apps/latest/mutations/verificationSessionReject#arguments-reason.fields.code" target="_blank" class="body-link">new enum values</a> on <a href="https://shopify.dev/docs/api/payments-apps/latest/enums/VerificationSessionStateReason" target="_blank" class="body-link"><code>VerificationSessionStateReason</code></a> include:</p>
<ul>
<li><code>RESOURCE_NOT_FOUND</code>: The payment method could not be found in the payment provider's system.</li>
<li><code>RESOURCE_INVALID</code>: The payment token is not valid for this use case (for example, a mismatch between customer and payment method).</li>
</ul>
<p>A new input field on <code>VerificationSessionRejectionReasonInput</code>(<a href="https://shopify.dev/docs/api/payments-apps/2026-04/input-objects/VerificationSessionRejectionReasonInput" target="_blank" class="body-link">https://shopify.dev/docs/api/payments-apps/2026-04/input-objects/VerificationSessionRejectionReasonInput</a>) has also been added:</p>
<ul>
<li><code>merchantMessage</code> (string, optional): A custom, localized message to provide to the merchant when a verification is rejected.</li>
</ul>
<p>These changes give payment apps more granular control over verification rejection reporting.</p>
</div> ]]></description>
    <pubDate>Sat, 21 Feb 2026 17:00:00 +0000</pubDate>
    <atom:published>2026-02-21T17:00:00.000Z</atom:published>
    <atom:updated>2026-03-02T15:27:00.000Z</atom:updated>
    <category>API</category>
    <category>Update</category>
    <category>Payments Apps API</category>
    <category>2026-04</category>
    <link>https://shopify.dev/changelog/new-rejection-reason-codes-and-merchant-message-added-to-verificationsessionreject-mutation</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/new-rejection-reason-codes-and-merchant-message-added-to-verificationsessionreject-mutation</guid>
  </item>
  <item>
    <title>JSON metafield values limited to 128KB</title>
    <description><![CDATA[ <div class=""><p>When using API version 2026-04 or later, JSON type metafield writes will be limited to 128KB. Limits for all other metafield types remain unchanged (<a href="https://shopify.dev/docs/apps/build/metafields/metafield-limits" target="_blank" class="body-link">current limits</a>). <strong>All apps that use JSON fields (prior to April 1st, 2026), will be grandfathered at the current 2MB limit.</strong> Large metafield values continue to be readable by all API versions, including future versions.</p>
<p>Large JSON metafield negatively impact storefront performance—particularly when multiple large values are loaded together, which can result in tens of megabytes of data being fetched for a single page. Our goal is to accommodate all current use cases while preventing performance issues stemming from extremely large values. </p>
<p>If you are a new app and believe you have a use case that requires &gt;128KB JSON fields, please fill out this <a href="https://docs.google.com/forms/d/e/1FAIpQLSdMEzS4NoKB3BfL3gjQMRhPT3ZNtZipzuBxVWy8SqJCYYBkMw/viewform?usp=publish-editor" target="_blank" class="body-link">form</a> to request access. Additional limits will be granted on a case by case basis.</p>
<p><strong>Note</strong>: Initially, this change limited metafields to 16KB. After feedback from our developer community, we've revised those limits to accommodate more use cases and updated this post.</p>
</div> ]]></description>
    <pubDate>Thu, 19 Feb 2026 17:00:00 +0000</pubDate>
    <atom:published>2026-02-19T17:00:00.000Z</atom:published>
    <atom:updated>2026-02-26T18:53:41.000Z</atom:updated>
    <category>Action Required</category>
    <category>API</category>
    <category>Breaking API Change</category>
    <category>Admin GraphQL API</category>
    <category>Admin REST API</category>
    <category>Customer Account API</category>
    <category>Storefront API</category>
    <category>2026-04</category>
    <link>https://shopify.dev/changelog/reduced-metafield-value-sizes</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/reduced-metafield-value-sizes</guid>
  </item>
  <item>
    <title>The Dev Dashboard is now multi-lingual</title>
    <description><![CDATA[ <div class=""><p>The Dev Dashboard now renders in your preferred language, and is available in all the languages supported by the Shopify admin.</p>
<p>For more information, see <a href="https://help.shopify.com/en/manual/your-account/languages" target="_blank" class="body-link">Choosing your account language and region</a>.</p>
</div> ]]></description>
    <pubDate>Thu, 19 Feb 2026 13:30:00 +0000</pubDate>
    <atom:published>2026-02-19T13:30:00.000Z</atom:published>
    <atom:updated>2026-02-19T13:30:00.000Z</atom:updated>
    <category>Tools</category>
    <category>Update</category>
    <link>https://shopify.dev/changelog/the-dev-dashboard-is-now-multi-lingual</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/the-dev-dashboard-is-now-multi-lingual</guid>
  </item>
  <item>
    <title>Use the Admin API and bulk operations in Shopify CLI</title>
    <description><![CDATA[ <div class=""><p>Shopify CLI 3.90.1 now features commands that let you execute queries, mutations, and <a href="https://shopify.dev/docs/api/usage/bulk-operations/queries" target="_blank" class="body-link">bulk operations</a> right from your terminal.</p>
<ul>
<li><code>shopify app execute</code> allows you to run standard Admin API queries and mutations.  </li>
<li><code>shopify app bulk execute</code> allows you to start bulk queries and bulk mutations, and optionally <code>--watch</code> them synchronously.  </li>
<li><code>shopify app bulk status</code> and <code>shopify app bulk cancel</code> allow you to monitor and manage bulk operations.</li>
</ul>
<p>These new commands come on the heels of the release of <a href="https://shopify.dev/changelog/faster-bulk-operations" target="_blank" class="body-link">improved performance and expanded mutation support for bulk operations</a>, which make it possible to handle larger data sets for a wider variety of data types. With this Shopify CLI release, it’s now easy for you to script and automate both bulk operations and standard GraphQL operations with the Admin API, or utilize them with coding agents to query and manipulate your dev stores.</p>
<p>For more information, see the <a href="https://shopify.dev/docs/api/usage/api-exploration/admin-cli-app-execute" target="_blank" class="body-link">documentation</a> and our <a href="https://community.shopify.dev/t/admin-api-and-bulk-operations-in-shopify-cli/29467" target="_blank" class="body-link">community announcement</a>.</p>
</div> ]]></description>
    <pubDate>Thu, 19 Feb 2026 13:30:00 +0000</pubDate>
    <atom:published>2026-02-19T13:30:00.000Z</atom:published>
    <atom:updated>2026-02-19T13:30:00.000Z</atom:updated>
    <category>Tools</category>
    <category>New</category>
    <link>https://shopify.dev/changelog/use-the-admin-api-and-bulk-operations-in-shopify-cli</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/use-the-admin-api-and-bulk-operations-in-shopify-cli</guid>
  </item>
  <item>
    <title>Improved app logs and monitoring</title>
    <description><![CDATA[ <div class=""><p>We are enhancing app monitoring and logs to provide better visibility and debugging capabilities, starting with webhooks.</p>
<p><strong>Monitoring Page Improvements</strong></p>
<ul>
<li>Expanded History: Access up to 30 days of webhook data, including successful deliveries, error counts, and p90 response times.  </li>
<li>Topic Filtering: List all topics and filter the page to view charts specific to a single topic.</li>
</ul>
<p><strong>Logs Page Improvements</strong></p>
<ul>
<li>Fine-Grained Time Filters: Search logs using customized start and end dates and times for faster troubleshooting.  </li>
<li>Multi-Select Filters: Filter by multiple Shops, Statuses, or Topics simultaneously.  </li>
<li>Filter counts: See the count of events associated with each Shop, Status, and Topic filter option.</li>
</ul>
<p>These features are now available in the <a href="https://dev.shopify.com/dashboard/" target="_blank" class="body-link">Dev Dashboard</a>.</p>
</div> ]]></description>
    <pubDate>Thu, 19 Feb 2026 13:30:00 +0000</pubDate>
    <atom:published>2026-02-19T13:30:00.000Z</atom:published>
    <atom:updated>2026-02-19T13:30:00.000Z</atom:updated>
    <category>Tools</category>
    <category>Update</category>
    <link>https://shopify.dev/changelog/improved-app-logs-and-monitoring</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/improved-app-logs-and-monitoring</guid>
  </item>
  <item>
    <title>Shopify-account web component for storefronts</title>
    <description><![CDATA[ <div class=""><p>Simplify customer account implementation with our new <code>shopify-account</code> component. This web component allows customers to sign in and access account navigation menu—all without leaving the storefront.</p>
<h2>What's included</h2>
<ul>
<li>Sign-in methods: passwordless sign-in, social sign-in with Facebook and Google, and automatic sign-in with Shop recognition</li>
<li>Account navigation menu with customizable quick links</li>
<li>Styling control via CSS variables</li>
<li>Automatic feature updates from Shopify without requiring you to update your code</li>
</ul>
<p>This component eliminates the guesswork around customer account implementation. It's fully integrated with the latest version of customer accounts, offers customizable styling to match your brand, and enables seamless sign-in for your customers.</p>
<p>Visit our <a href="https://shopify.dev/docs/api/storefront-web-components/components/shopify-account" target="_blank" class="body-link">dev docs</a> to get started now.</p>
<p>The account component is available now in the latest version of the Horizon themes. If stores you manage are using a Horizon theme, update your theme now to get this component live on your storefront.</p>
<h2>Coming soon</h2>
<p>The <code>shopify-account</code> component will soon be required for all themes submitted to or updated in the Theme Store. If you're a theme partner, we recommend <a href="https://shopify.dev/docs/storefronts/themes/customer-engagement/account-component" target="_blank" class="body-link">adding it to your themes</a> now.</p>
</div> ]]></description>
    <pubDate>Wed, 18 Feb 2026 17:05:00 +0000</pubDate>
    <atom:published>2026-02-18T17:05:00.000Z</atom:published>
    <atom:updated>2026-02-18T17:05:00.000Z</atom:updated>
    <category>Platform</category>
    <category>New</category>
    <link>https://shopify.dev/changelog/shopify-account-web-component-for-storefronts</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/shopify-account-web-component-for-storefronts</guid>
  </item>
  <item>
    <title>Remaining line items weight available for fulfillment orders</title>
    <description><![CDATA[ <div class=""><p>In the API 2026-04 release candidate version, a new field, <code>remainingLineItemsWeight</code>, has been added to the <code>FulfillmentOrder</code> GraphQL type. This field returns the total weight of line items that haven’t been fulfilled yet, which enables you to make decisions based on remaining weight in your fulfillment order.</p>
<p>For implementation details and further information, see the <a href="https://shopify.dev/docs/api/admin-graphql/latest/objects/FulfillmentOrder" target="_blank" class="body-link">fulfillment orders documentation</a>.</p>
</div> ]]></description>
    <pubDate>Mon, 16 Feb 2026 05:00:00 +0000</pubDate>
    <atom:published>2026-02-16T05:00:00.000Z</atom:published>
    <atom:updated>2026-02-16T05:00:00.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <category>Admin GraphQL API</category>
    <category>2026-04</category>
    <link>https://shopify.dev/changelog/remaining-line-items-weight-available-for-fulfillment-orders</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/remaining-line-items-weight-available-for-fulfillment-orders</guid>
  </item>
  <item>
    <title>Added new enum values for ColumnDataType in ShopifyqlTableDataColumn</title>
    <description><![CDATA[ <div class=""><p>We have introduced 3 new enum values to <a href="https://shopify.dev/docs/api/admin-graphql/2026-04/enums/ColumnDataType" target="_blank" class="body-link">ColumnDataType</a> in <a href="https://shopify.dev/docs/api/admin-graphql/2026-04/objects/ShopifyqlTableDataColumn" target="_blank" class="body-link">ShopifyqlTableDataColumn</a>: </p>
<ul>
<li><code>RATING</code> : Represents a rating value as float.</li>
<li><code>STRING IDENTITY</code>:  Represents a GID/UUID value.</li>
<li><code>COLOR</code>:  Represents a color value in HEX format.</li>
</ul>
</div> ]]></description>
    <pubDate>Thu, 12 Feb 2026 17:00:00 +0000</pubDate>
    <atom:published>2026-02-12T17:00:00.000Z</atom:published>
    <atom:updated>2026-02-12T17:00:00.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <category>Admin GraphQL API</category>
    <category>2026-04</category>
    <link>https://shopify.dev/changelog/added-new-enum-values-for-columndatatype-in-shopifyqltabledatacolumn</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/added-new-enum-values-for-columndatatype-in-shopifyqltabledatacolumn</guid>
  </item>
  <item>
    <title>Webhook subscriptions now support a name field for identification</title>
    <description><![CDATA[ <div class=""><p>You can now assign an optional name to your webhook subscriptions to simplify identification and management. This feature is available for both TOML-based subscriptions and subscriptions created through the Admin API subscriptions created via the GraphQL Admin API.</p>
<p>Naming your webhooks is particularly beneficial when you have multiple subscriptions targeting the same endpoint or listening to the same topic with different filters. When a webhook is delivered, its name is included in the request headers, allowing you to route and process incoming webhooks without needing to parse the payload body.</p>
<p>For admin API subscriptions, the webhook name must be unique per shop. For declarative subscriptions, the name must be unique per app. Names can be up to 50 characters long and may include alphanumeric characters, underscores, and hyphens.</p>
<p>To set a name for TOML-based subscriptions, update the <code>name</code> field in your <code>shopify.app.toml</code> webhook configuration. From <code>2026-04</code>, you can name admin API subscriptions, the <code>name</code> field can be set using the <a href="https://shopify.dev/docs/api/admin-graphql/2026-04/objects/WebhookSubscription" target="_blank" class="body-link">WebhookSubscription</a> GraphQL object, as well as through the <a href="https://shopify.dev/docs/api/admin-graphql/2026-04/mutations/webhookSubscriptionCreate" target="_blank" class="body-link">webhookSubscriptionCreate</a> and <a href="https://shopify.dev/docs/api/admin-graphql/2026-04/mutations/webhookSubscriptionUpdate" target="_blank" class="body-link">webhookSubscriptionUpdate</a> mutations.</p>
</div> ]]></description>
    <pubDate>Wed, 11 Feb 2026 17:00:00 +0000</pubDate>
    <atom:published>2026-02-11T17:00:00.000Z</atom:published>
    <atom:updated>2026-02-11T17:00:00.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <category>Admin GraphQL API</category>
    <category>Events &amp; webhooks</category>
    <category>2026-04</category>
    <link>https://shopify.dev/changelog/webhook-subscriptions-now-support-a-name-field-for-identification</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/webhook-subscriptions-now-support-a-name-field-for-identification</guid>
  </item>
  <item>
    <title>shopify.app.extensions() in App Bridge now supports POS UI extensions</title>
    <description><![CDATA[ <div class=""><p>The <a href="https://shopify.dev/docs/api/app-home/apis/app" target="_blank" class="body-link"><code>shopify.app.extensions()</code> method in App Bridge</a> now supports <strong>Point of Sale (POS) UI extensions</strong>, in addition to checkout, customer account, Admin, and Theme extensions.</p>
<p>With this update, your embedded app can query the status of POS UI extensions along with other extension surfaces. This enables you to consistently handle and activate your Point of Sale extensions, simplifying the creation of onboarding flows and setup dashboards that encompass your entire app extension ecosystem, including in-store experiences.</p>
<p>For more information, refer to the <a href="https://shopify.dev/docs/api/app-home/apis/app" target="_blank" class="body-link">developer documentation</a>.</p>
</div> ]]></description>
    <pubDate>Mon, 09 Feb 2026 22:35:00 +0000</pubDate>
    <atom:published>2026-02-09T22:35:00.000Z</atom:published>
    <atom:updated>2026-02-09T22:35:00.000Z</atom:updated>
    <category>API</category>
    <category>Update</category>
    <category>App Bridge</category>
    <category>POS Extensions</category>
    <link>https://shopify.dev/changelog/shopifyappextensions-in-app-bridge-now-supports-pos-ui-extensions</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/shopifyappextensions-in-app-bridge-now-supports-pos-ui-extensions</guid>
  </item>
  <item>
    <title>Hydrogen January 2026 release</title>
    <description><![CDATA[ <div class=""><p>The Hydrogen January 2026 release (v2026.1.0) is out. This is a quarterly API version bump to Storefront API 2026-01 and Customer Account API 2026-01.</p>
<ul>
<li>Updated Storefront API and Customer Account API to 2026-01 (<a href="https://github.com/Shopify/hydrogen/pull/3434" target="_blank" class="body-link">#3434</a>)</li>
<li>The <code>cartDiscountCodesUpdate</code> mutation now requires the <code>discountCodes</code> argument. If you have custom cart discount code logic, verify your mutations include this field before upgrading.</li>
</ul>
<p>Check out the <a href="https://github.com/Shopify/hydrogen/releases/tag/%40shopify%2Fhydrogen%402026.1.0" target="_blank" class="body-link">full release notes</a> for more details. Review the <a href="https://shopify.dev/docs/api/release-notes/2026-01" target="_blank" class="body-link">Storefront API 2026-01 changelog</a> and <a href="https://shopify.dev/docs/api/customer/changelog" target="_blank" class="body-link">Customer Account API 2026-01 changelog</a> for other changes that may affect your storefront. And please drop your comments, feedback, and suggestions in <a href="https://github.com/Shopify/hydrogen/discussions" target="_blank" class="body-link">GitHub Discussions</a>.</p>
</div> ]]></description>
    <pubDate>Mon, 09 Feb 2026 17:00:00 +0000</pubDate>
    <atom:published>2026-02-09T17:00:00.000Z</atom:published>
    <atom:updated>2026-04-16T22:28:39.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <category>Hydrogen</category>
    <link>https://shopify.dev/changelog/hydrogen-january-2026-release</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/hydrogen-january-2026-release</guid>
  </item>
  <item>
    <title>The `GiftCardConfiguration` object now includes default gift card expiration</title>
    <description><![CDATA[ <div class=""><p>You can now query a merchant's default gift card expiration settings using the GraphQL Admin API.</p>
<p>The new <a href="https://shopify.dev/docs/api/admin-graphql/2026-04/objects/GiftCardConfiguration#field-GiftCardConfiguration.fields.expirationConfiguration" target="_blank" class="body-link"><code>expirationConfiguration</code></a> field on the <a href="https://shopify.dev/docs/api/admin-graphql/2026-04/objects/GiftCardConfiguration" target="_blank" class="body-link"><code>GiftCardConfiguration</code></a> object returns the merchant's configured expiration settings, including the duration value and time unit (days, months, or years). When merchants have automatic gift card expiration enabled, you can use these settings to calculate the <code>expiresOn</code> date for new gift cards.</p>
<h2>How it works</h2>
<ul>
<li>The <code>expirationConfiguration</code> field returns either:<ul>
<li>a <a href="https://shopify.dev/docs/api/admin-graphql/2026-04/objects/GiftCardExpirationConfiguration" target="_blank" class="body-link"><code>GiftCardExpirationConfiguration</code></a> object when the merchant has configured a default gift card expiration</li>
<li><code>null</code> when the merchant has gift cards set never to expire</li>
</ul>
</li>
<li>The <code>GiftCardExpirationConfiguration</code> object includes:<ul>
<li>an <a href="https://shopify.dev/docs/api/admin-graphql/2026-04/objects/GiftCardExpirationConfiguration#field-GiftCardExpirationConfiguration.fields.expirationValue" target="_blank" class="body-link"><code>expirationValue</code></a> field (integer)</li>
<li>an <a href="https://shopify.dev/docs/api/admin-graphql/2026-04/objects/GiftCardExpirationConfiguration#field-GiftCardExpirationConfiguration.fields.expirationUnit" target="_blank" class="body-link"><code>expirationUnit</code></a> field (enum: <code>DAYS</code>, <code>MONTHS</code>, <code>YEARS</code>)</li>
</ul>
</li>
</ul>
<h2>Example query</h2>
<pre><code>query {
  giftCardConfiguration {
    expirationConfiguration {
      expirationValue
      expirationUnit
    }
  }
}
</code></pre>
</div> ]]></description>
    <pubDate>Fri, 06 Feb 2026 17:00:00 +0000</pubDate>
    <atom:published>2026-02-06T17:00:00.000Z</atom:published>
    <atom:updated>2026-02-06T17:00:00.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <category>Admin GraphQL API</category>
    <category>2026-04</category>
    <link>https://shopify.dev/changelog/giftcardconfiguration-now-includes-default-gift-card-expiration</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/giftcardconfiguration-now-includes-default-gift-card-expiration</guid>
  </item>
  <item>
    <title>Shop Minis January 2026 update</title>
    <description><![CDATA[ <div class=""><h2>New Features</h2>
<h3>Delayed Consent</h3>
<p>We've enhanced consent management by introducing a delayed consent popup for all Shop Minis.</p>
<p><strong>What this means for partners:</strong></p>
<ul>
<li>Users will see a consent screen before your mini loads if you request scopes.</li>
<li>The mini's landing (splash) screen is shown while consent is pending.</li>
<li>Partners should customize their splash screen to provide a great first impression.</li>
</ul>
</div> ]]></description>
    <pubDate>Fri, 06 Feb 2026 14:10:00 +0000</pubDate>
    <atom:published>2026-02-06T14:10:00.000Z</atom:published>
    <atom:updated>2026-02-06T14:10:00.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <category>Shop Minis</category>
    <link>https://shopify.dev/changelog/shop-minis-january-2026-update</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/shop-minis-january-2026-update</guid>
  </item>
  <item>
    <title>Subscriptions APIs: new payment error code and error classification</title>
    <description><![CDATA[ <div class=""><p>We’ve added new payment error codes for subscription billing attempts in the GraphQL Admin API. These new error codes provide more granularity and consistency, making payment errors easier to diagnose. They’re <a href="https://shopify.dev/docs/api/admin-graphql/unstable/enums/SubscriptionBillingAttemptErrorCode" target="_blank" class="body-link">currently available</a> in the <code>unstable</code> API version, will be released in version <code>2026-04</code>.</p>
<p>We’re also updating our error-code mapping to be more explicit:</p>
<ul>
<li>In the <code>unstable</code> version, you’ll start seeing new error codes display, along with fewer <code>AUTHENTICATION_ERROR</code> and <code>PAYMENT_METHOD_DECLINED</code> errors.</li>
<li>If you’re on version <code>2026-01</code> or earlier, you might still notice a shift in error volumes across existing error codes. We improved our mapping so that some errors previously categorized as generic decline errors, such as <code>PAYMENT_METHOD_DECLINED</code>, are now mapped more explicitly to existing error codes. For example, we can map more cases to <code>INSUFFICIENT_FUNDS</code> instead of generic declines.</li>
</ul>
<h2>Known issue resolved</h2>
<p>From January 28, 2026, to February 4, 2026, there was a temporary issue with error mapping, which might have caused a surge in <code>TRANSIENT_ERROR</code>. This has been fixed.</p>
<h2>Error code mapping</h2>
<ul>
<li><p>If you're on version <code>unstable</code> or <code>2026-04</code>, you'll see the new error code.</p>
</li>
<li><p>If you're on <code>2026-01</code> or earlier versions, you'll see the currently mapped code.</p>
<p>| New error code | Currently mapped error code |
|</p>
</li>
</ul>
</div> ]]></description>
    <pubDate>Wed, 04 Feb 2026 20:10:00 +0000</pubDate>
    <atom:published>2026-02-04T20:10:00.000Z</atom:published>
    <atom:updated>2026-02-05T18:35:07.000Z</atom:updated>
    <category>API</category>
    <category>Update</category>
    <category>Admin GraphQL API</category>
    <category>2026-04</category>
    <link>https://shopify.dev/changelog/new-payment-error-codes-added-to-subscriptions-apis</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/new-payment-error-codes-added-to-subscriptions-apis</guid>
  </item>
  <item>
    <title>Automatically copy cart metafields to orders at checkout completion</title>
    <description><![CDATA[ <div class=""><p>As of API version <code>2026-04</code>, order metafield definitions can copy values from cart metafields to order metafields when an order is created. You can specify which cart metafields should be carried over to orders. </p>
<p>The metafield value is copied if both these conditions are true:</p>
<ul>
<li>An order metafield definition exists with the same namespace and key as a cart metafield. </li>
<li>The <code>cartToOrderCopyable</code> capability is enabled on that order metafield definition.</li>
</ul>
<p>View <a href="https://shopify.dev/docs/apps/build/metafields/use-metafield-capabilities#cart-to-order-copyable" target="_blank" class="body-link">developer documentation</a>.</p>
<p>Cart metafields are now accessible in all APIs that interact with the buyer journey, including the Storefront API, Checkout UI extensions, Functions, and the GraphQL Admin API. </p>
<p>We now recommend using cart metafields instead of cart attributes and checkout metafields for custom data storage. Cart metafields offer enhanced security features, such as edit and view permissions, and app-reserved namespaces, which prevent unauthorized access by other apps.</p>
<p>Learn more about <a href="https://shopify.dev/docs/apps/build/metafields/use-metafield-capabilities" target="_blank" class="body-link">metafield capabilities</a>.</p>
</div> ]]></description>
    <pubDate>Wed, 04 Feb 2026 18:15:00 +0000</pubDate>
    <atom:published>2026-02-04T18:15:00.000Z</atom:published>
    <atom:updated>2026-02-04T19:09:17.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <category>Admin GraphQL API</category>
    <category>2026-04</category>
    <link>https://shopify.dev/changelog/automatically-copy-cart-metafields-to-orders-at-checkout-completion</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/automatically-copy-cart-metafields-to-orders-at-checkout-completion</guid>
  </item>
  <item>
    <title>Introducing the `tracks_inventory` query filter for products</title>
    <description><![CDATA[ <div class=""><p>As of GraphQL Admin API version <code>2026-04</code>, you can <a href="https://shopify.dev/docs/api/admin-graphql/latest/queries/products#argument-query-filter-tracks_inventory" target="_blank" class="body-link">filter products</a> based on whether their inventory is tracked using the new <code>tracks_inventory</code> Boolean filter.</p>
<p>This is especially useful when working with merchants like dropshippers who might not maintain on-hand inventory.</p>
<h3>Example usage</h3>
<pre><code>query RetrieveWithInventoryProducts {
  withInventory: products(first: 10, query: &quot;published_status:published AND tracks_inventory:true&quot;) {
    edges {
      node {
        id
        title
        status
        totalInventory
        tracksInventory
      }
    }
  }
</code></pre>
</div> ]]></description>
    <pubDate>Tue, 03 Feb 2026 17:00:00 +0000</pubDate>
    <atom:published>2026-02-03T17:00:00.000Z</atom:published>
    <atom:updated>2026-02-10T02:15:54.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <category>Admin GraphQL API</category>
    <category>2026-04</category>
    <link>https://shopify.dev/changelog/introducing-tracksinventory-query-filter-for-products</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/introducing-tracksinventory-query-filter-for-products</guid>
  </item>
  <item>
    <title>Increasing the app block limit to 30 for theme app extensions</title>
    <description><![CDATA[ <div class=""><p>You can now include up to 30 app blocks in a single theme app extension, an increase from the previous limit of 25. This gives you more flexibility to build comprehensive app experiences that integrate seamlessly with themes.</p>
<p>Learn more about <a href="https://shopify.dev/docs/apps/build/online-store/theme-app-extensions" target="_blank" class="body-link">theme app extensions</a> and <a href="https://shopify.dev/docs/apps/build/online-store/theme-app-extensions/configuration#file-and-content-size-limits" target="_blank" class="body-link">file and content size limits</a> on Shopify.dev.</p>
</div> ]]></description>
    <pubDate>Tue, 03 Feb 2026 11:00:00 +0000</pubDate>
    <atom:published>2026-02-03T11:00:00.000Z</atom:published>
    <atom:updated>2026-02-03T11:00:00.000Z</atom:updated>
    <category>Themes</category>
    <category>Update</category>
    <link>https://shopify.dev/changelog/increasing-the-app-block-limit-to-30-for-theme-app-extensions</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/increasing-the-app-block-limit-to-30-for-theme-app-extensions</guid>
  </item>
  <item>
    <title>Hydrogen October 2025 release</title>
    <description><![CDATA[ <div class=""><p>The Hydrogen October 2025 release (v2025.10.0) is out. This release updates the Storefront API and Customer Account API to 2025-10 and adds new cart mutations that simplify multi-gift-card and multi-address checkout flows.</p>
<ul>
<li>Updated Storefront API and Customer Account API to 2025-10 (<a href="https://github.com/Shopify/hydrogen/pull/3352" target="_blank" class="body-link">#3352</a>)</li>
<li>Added <code>cart.addGiftCardCodes</code> to append gift card codes without re-submitting existing ones (<a href="https://github.com/Shopify/hydrogen/pull/3401" target="_blank" class="body-link">#3401</a>)</li>
<li>Added <code>cart.replaceDeliveryAddresses</code> to replace all delivery addresses in a single call (<a href="https://github.com/Shopify/hydrogen/pull/3406" target="_blank" class="body-link">#3406</a>)</li>
<li><code>cart.updateDeliveryAddresses([])</code> now clears all delivery addresses on the cart. Previously this was a no-op. (<a href="https://github.com/Shopify/hydrogen/pull/3393" target="_blank" class="body-link">#3393</a>)</li>
<li>Added <code>visitorConsent</code> support on the <code>@inContext</code> directive for Storefront API parity (<a href="https://github.com/Shopify/hydrogen/pull/3408" target="_blank" class="body-link">#3408</a>)</li>
</ul>
<p>Check out the <a href="https://github.com/Shopify/hydrogen/releases/tag/%40shopify%2Fhydrogen%402025.10.0" target="_blank" class="body-link">full release notes</a> for more details. And please drop your comments, feedback, and suggestions in <a href="https://github.com/Shopify/hydrogen/discussions" target="_blank" class="body-link">GitHub Discussions</a>.</p>
</div> ]]></description>
    <pubDate>Fri, 30 Jan 2026 17:00:00 +0000</pubDate>
    <atom:published>2026-01-30T17:00:00.000Z</atom:published>
    <atom:updated>2026-04-16T22:28:24.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <category>Hydrogen</category>
    <link>https://shopify.dev/changelog/hydrogen-october-2025-release</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/hydrogen-october-2025-release</guid>
  </item>
  <item>
    <title>Discouraging use of `receiptJson` on `OrderTransaction` in the GraphQL Admin API</title>
    <description><![CDATA[ <div class=""><p>We’re <strong>discouraging</strong> use of <a href="https://shopify.dev/docs/api/admin-graphql/latest/objects/OrderTransaction#field-OrderTransaction.fields.receiptJson" target="_blank" class="body-link"><code>OrderTransaction.receiptJson</code></a>. You should stop relying on <code>receiptJson</code> in production apps.</p>
<p><code>receiptJson</code> is <strong>gateway-defined</strong>, <strong>inconsistently shaped</strong>, and may <strong>change without notice</strong>. Because its structure isn’t stable or typed, changes can lead to unexpected app failures.</p>
</div> ]]></description>
    <pubDate>Thu, 29 Jan 2026 21:10:00 +0000</pubDate>
    <atom:published>2026-01-29T21:10:00.000Z</atom:published>
    <atom:updated>2026-01-29T21:35:26.000Z</atom:updated>
    <category>API</category>
    <category>Update</category>
    <category>Admin GraphQL API</category>
    <link>https://shopify.dev/changelog/discouraging-use-of-receiptjson-on-ordertransaction-in-the-graphql-admin-api</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/discouraging-use-of-receiptjson-on-ordertransaction-in-the-graphql-admin-api</guid>
  </item>
  <item>
    <title>Enhanced Discount Function configuration with Admin UI extensions</title>
    <description><![CDATA[ <div class=""><p>Admin UI extensions for Discount Functions can now interact with the selected discount method and manage discount classes, letting you customize the discount configuration experience directly within the Shopify admin.</p>
<p>This is a non-breaking change that adds new functionality to existing discount UI extensions.</p>
<h3>What's new</h3>
<p>We've added a new <code>discounts</code> object to the Discount Function Settings API on the <code>2026-01</code> API version, providing these features:</p>
<ul>
<li><strong><code>discountClasses</code></strong>: Access enabled discount classes (product, order, shipping).</li>
<li><strong><code>updateDiscountClasses</code></strong>: Enable or disable discount classes programmatically.</li>
<li><strong><code>discountMethod</code></strong>: Access the selected discount method (code or automatic).</li>
</ul>
<h3>What this solves</h3>
<p>Previously, discount UI extensions had three main limitations:</p>
<ul>
<li><strong>Inability to manage discount classes</strong>: All Discount Functions defaulted to enabling all three discount classes, causing conflicts even when only one was needed.</li>
<li><strong>No conditional UI based on method</strong>: It wasn't possible to render different options for automatic versus code discounts.</li>
<li><strong>No conditional UI based on classes</strong>: There was no way to show/hide settings based on the enabled discount classes.</li>
</ul>
<h3>What you can build</h3>
<p>With these enhancements, you can now:</p>
<ul>
<li><strong>Create multi-effect discounts</strong>: Develop discounts that offer savings on products, order total, and/or shipping, allowing merchants to toggle each option.</li>
<li><strong>Method-specific configuration</strong>: Display different UI for automatic versus code discounts within the same app and discount type.</li>
<li><strong>Reduce combination conflicts</strong>: Enable only the discount classes that your function requires to prevent unnecessary conflicts.</li>
</ul>
<h3>Learn more</h3>
<ul>
<li><a href="https://shopify.dev/docs/apps/build/discounts/build-ui-extension?extension=javascript" target="_blank" class="body-link">Build a discount UI with UI extensions</a> (updated)</li>
<li><a href="https://shopify.dev/docs/api/admin-extensions/2026-01/api/target-apis/discount-function-settings-api#discounts" target="_blank" class="body-link">Admin UI extensions API reference</a></li>
</ul>
</div> ]]></description>
    <pubDate>Wed, 28 Jan 2026 17:00:00 +0000</pubDate>
    <atom:published>2026-01-28T17:00:00.000Z</atom:published>
    <atom:updated>2026-01-28T17:00:00.000Z</atom:updated>
    <category>API</category>
    <category>Update</category>
    <category>Admin Extensions</category>
    <category>2026-01</category>
    <link>https://shopify.dev/changelog/enhanced-discount-function-configuration-with-admin-ui-extensions</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/enhanced-discount-function-configuration-with-admin-ui-extensions</guid>
  </item>
  <item>
    <title>Ensuring POS UI extension stability by hardening callback handling</title>
    <description><![CDATA[ <div class=""><p>Starting with <code>POS 10.19.0</code>, unhandled errors in extension callbacks trigger an error page instead of failing silently. This change ensures a more stable and predictable experience for merchants and helps developers identify issues proactively.</p>
<p>To prevent disruptions for merchants and minimize unexpected failures, developers should thoroughly test callbacks and ensure all exceptions are properly handled.</p>
<p>For example, this code will now trigger an error page:</p>
<pre><code class="language-js">// Before: Errors occur but do not display an error page.
// POS 10.19.0 onwards: Displays an error page upon encountering an error.
&lt;Screen
  name=&quot;example&quot;
  title=&quot;Example&quot;
  onReceiveParams={(params) =&gt; mayNotExist(params)}
&gt;&lt;/Screen&gt;
</code></pre>
<p>One solution is to wrap the logic in try/catch blocks:</p>
<pre><code class="language-js">&lt;Screen
  name=&quot;example&quot;
  title=&quot;Example&quot;
  onReceiveParams={(params) =&gt; {
    try {
      mayNotExist(params);
    } catch (error) {
      // Handle errors.
    }
  }}
&gt;&lt;/Screen&gt;
</code></pre>
</div> ]]></description>
    <pubDate>Tue, 27 Jan 2026 21:30:00 +0000</pubDate>
    <atom:published>2026-01-27T21:30:00.000Z</atom:published>
    <atom:updated>2026-01-27T21:30:00.000Z</atom:updated>
    <category>Action Required</category>
    <category>API</category>
    <category>Breaking API Change</category>
    <category>POS Extensions</category>
    <link>https://shopify.dev/changelog/ensuring-pos-ui-extension-stability-by-hardening-callback-handling</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/ensuring-pos-ui-extension-stability-by-hardening-callback-handling</guid>
  </item>
  <item>
    <title>Events data now limited to one year retention</title>
    <description><![CDATA[ <div class=""><p>Access to <code>events</code> data older than one year is no longer available via the <a href="https://shopify.dev/docs/api/admin-graphql/latest/interfaces/Event" target="_blank" class="body-link">Admin GraphQL <code>Event</code> interface</a> or the <a href="https://shopify.dev/docs/api/admin-rest/latest/resources/event" target="_blank" class="body-link">Admin REST <code>events</code> resource</a>. This update is part of our ongoing efforts to optimize data management and improve system performance. </p>
<p>Please review and update any dependencies on these events. If you have any questions or need further assistance, feel free to reach out on the <a href="https://community.shopify.dev/" target="_blank" class="body-link">Shopify Developer Community forums</a>. </p>
</div> ]]></description>
    <pubDate>Tue, 27 Jan 2026 17:00:00 +0000</pubDate>
    <atom:published>2026-01-27T17:00:00.000Z</atom:published>
    <atom:updated>2026-01-27T17:00:00.000Z</atom:updated>
    <category>API</category>
    <category>Deprecation announcement</category>
    <category>Admin GraphQL API</category>
    <category>Admin REST API</category>
    <link>https://shopify.dev/changelog/events-data-now-limited-to-one-year-retention</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/events-data-now-limited-to-one-year-retention</guid>
  </item>
  <item>
    <title>Let buyers update subscription payment methods without leaving your extension</title>
    <description><![CDATA[ <div class=""><p>Buyers can now replace the payment method on their subscription contract without navigating away from your Customer Account UI extension. Simply invoke the intent and the native payment flow handles the rest, no need to store or display cards yourself.</p>
<p>This new capability is the first of its kind powered by a new Intents API that lets your extension invoke native customer account workflows for managing buyer information. </p>
<p>Dive into the <a href="https://shopify.dev/docs/api/customer-account-ui-extensions/latest/target-apis/platform-apis/intents-api" target="_blank" class="body-link">documentation on customer account intents</a> to get started.</p>
</div> ]]></description>
    <pubDate>Mon, 26 Jan 2026 19:00:00 +0000</pubDate>
    <atom:published>2026-01-26T19:00:00.000Z</atom:published>
    <atom:updated>2026-03-26T13:26:08.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <category>Customer Accounts</category>
    <category>2026-01</category>
    <link>https://shopify.dev/changelog/intents-api-for-customer-accounts</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/intents-api-for-customer-accounts</guid>
  </item>
  <item>
    <title>Checkout UI extensions now default to non-blocking behavior</title>
    <description><![CDATA[ <div class=""><p>As of January 26, 2026, Checkout UI extensions that support blocking now default to non-blocking behavior. To enable blocking, merchants must explicitly activate the <strong>Allow app to block checkout</strong> setting in the checkout and accounts editor. </p>
<p>If your Checkout UI extension requires blocking, display a warning in the editor using the <a href="https://shopify.dev/docs/api/checkout-ui-extensions/latest/apis/buyer-journey" target="_blank" class="body-link"><code>useExtensionEditor()</code></a> hook, and include this step in your activation process. Inform merchants that they must enable <strong>Allow app to block checkout</strong> for the UI extension to function as intended.</p>
<p>We now recommend building custom checkout validation using Cart and Checkout Validation Functions instead of Checkout UI extensions, as they are more secure, performant, and guaranteed to run across supported checkouts. Learn more about <a href="https://shopify.dev/docs/apps/build/checkout/cart-checkout-validation" target="_blank" class="body-link">Cart and Checkout Validation Functions</a>.</p>
</div> ]]></description>
    <pubDate>Mon, 26 Jan 2026 16:30:00 +0000</pubDate>
    <atom:published>2026-01-26T16:30:00.000Z</atom:published>
    <atom:updated>2026-01-26T16:30:00.000Z</atom:updated>
    <category>Platform</category>
    <category>Update</category>
    <category>Checkout UI</category>
    <link>https://shopify.dev/changelog/checkout-ui-extensions-now-default-to-non-blocking-behavior</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/checkout-ui-extensions-now-default-to-non-blocking-behavior</guid>
  </item>
  <item>
    <title>New `article_list` input setting for themes</title>
    <description><![CDATA[ <div class=""><p>You can now add an <code>article_list</code> input setting to your theme sections and blocks. This new setting type outputs an article picker that lets merchants select multiple published articles, which can be used for creating featured article sections, related content areas, or article galleries.</p>
<p>Learn more about the <a href="https://shopify.dev/docs/storefronts/themes/architecture/settings/input-settings#article_list" target="_blank" class="body-link">article_list input setting</a> in the theme documentation.</p>
</div> ]]></description>
    <pubDate>Mon, 26 Jan 2026 10:00:00 +0000</pubDate>
    <atom:published>2026-01-26T10:00:00.000Z</atom:published>
    <atom:updated>2026-01-26T16:11:26.000Z</atom:updated>
    <category>Themes</category>
    <category>New</category>
    <link>https://shopify.dev/changelog/new-articlelist-input-setting-for-themes</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/new-articlelist-input-setting-for-themes</guid>
  </item>
  <item>
    <title>Localization support for POS UI extensions</title>
    <description><![CDATA[ <div class=""><p>Starting in POS 10.19, you can now localize your POS UI extensions for international merchants, staff, and customers. You can</p>
<ul>
<li><strong>Translate extension text</strong>: Define locale files with translation strings that automatically resolve based on customer and shop locales.</li>
<li><strong>Format currencies and numbers</strong>: Use <code>formatCurrency</code> and <code>formatNumber</code> to display values in locale-appropriate formats.</li>
<li><strong>Handle pluralization</strong>: Support complex plural rules across languages using the standard <code>Intl.PluralRules</code> specification.</li>
</ul>
<p>Learn how to <a href="https://shopify.dev/docs/apps/build/pos/localization" target="_blank" class="body-link">localize a POS UI extension</a>.</p>
</div> ]]></description>
    <pubDate>Fri, 23 Jan 2026 22:00:00 +0000</pubDate>
    <atom:published>2026-01-23T22:00:00.000Z</atom:published>
    <atom:updated>2026-01-23T22:00:00.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <category>POS Extensions</category>
    <category>2026-01</category>
    <link>https://shopify.dev/changelog/localization-support-for-pos-ui-extensions</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/localization-support-for-pos-ui-extensions</guid>
  </item>
  <item>
    <title>shopify.app.extensions() in App Bridge now supports Admin and Theme app extensions</title>
    <description><![CDATA[ <div class=""><p>The <a href="https://shopify.dev/docs/api/app-home/apis/app" target="_blank" class="body-link"><code>shopify.app.extensions()</code> method in App Bridge</a> now supports Admin and Theme app extensions, in addition to the previously available checkout and customer account extensions.</p>
<p>With this update, your embedded app can query the status of extensions across all major surfaces. This means you can receive consistent handle and activation data for Admin and Theme app extensions. As a result, you can build more comprehensive onboarding experiences and create setup dashboards that encompass your entire app extension ecosystem.</p>
<p>For further details, see the <a href="https://shopify.dev/docs/api/app-home/apis/app" target="_blank" class="body-link">dev docs</a>.</p>
</div> ]]></description>
    <pubDate>Fri, 23 Jan 2026 22:00:00 +0000</pubDate>
    <atom:published>2026-01-23T22:00:00.000Z</atom:published>
    <atom:updated>2026-01-23T23:17:11.000Z</atom:updated>
    <category>Platform</category>
    <category>Update</category>
    <category>App Bridge</category>
    <link>https://shopify.dev/changelog/extended-surface-support-for-shopifyappextensions-now-including-admin-and-storefront</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/extended-surface-support-for-shopifyappextensions-now-including-admin-and-storefront</guid>
  </item>
  <item>
    <title>POS UI extensions can now use the device camera</title>
    <description><![CDATA[ <div class=""><p>Starting with POS version 10.19.0, <a href="https://shopify.dev/docs/api/pos-ui-extensions/latest" target="_blank" class="body-link">POS UI extensions</a> can now access the device camera through a new Camera API. This enables new use cases like scanning IDs, capturing product photos, and attaching images directly within Shopify POS.</p>
<p>For options, usage examples, and best practices, see <a href="https://shopify.dev/docs/api/pos-ui-extensions/latest/target-apis/platform-apis/camera-api" target="_blank" class="body-link">Camera API</a>.</p>
</div> ]]></description>
    <pubDate>Fri, 23 Jan 2026 17:00:00 +0000</pubDate>
    <atom:published>2026-01-23T17:00:00.000Z</atom:published>
    <atom:updated>2026-04-24T17:29:27.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <category>POS Extensions</category>
    <category>2026-01</category>
    <link>https://shopify.dev/changelog/pos-ui-extensions-camera-api</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/pos-ui-extensions-camera-api</guid>
  </item>
  <item>
    <title>More control over app deploys in CI/CD pipelines</title>
    <description><![CDATA[ <div class=""><p>As of Shopify CLI 3.89, you now have more control over the types of extension and configuration updates that should be allowed in your automated app releases. This allows developers to be more confident in the safety of CI/CD pipelines and other app deployment automation.</p>
<p>This is possible via new flags on the <code>shopify app deploy</code> and <code>shopify app release</code> commands:</p>
<ul>
<li><code>--allow-updates</code>: Lets you deploy new app configuration and extensions, and update existing ones.</li>
<li><code>--allow-deletes</code>: Lets you delete app configuration and extensions.</li>
</ul>
<p>The existing <code>--force</code> command is equivalent to using these flags together. </p>
<p><strong>Note</strong>: Deleting app configuration and extensions also deletes related data on stores that have your app installed. To avoid accidentally deleting store data, Shopify recommends that you only use the <code>--allow-updates</code> flag in your default CI/CD workflow.</p>
<p>For more information, see <a href="https://shopify.dev/docs/apps/launch/deployment/deploy-in-ci-cd-pipeline#controlling-extension-and-configuration-deployment" target="_blank" class="body-link">documentation on Shopify.dev</a>.</p>
</div> ]]></description>
    <pubDate>Fri, 23 Jan 2026 14:00:00 +0000</pubDate>
    <atom:published>2026-01-23T14:00:00.000Z</atom:published>
    <atom:updated>2026-01-23T14:00:00.000Z</atom:updated>
    <category>Tools</category>
    <category>Update</category>
    <link>https://shopify.dev/changelog/more-control-over-app-deploys-in-cicd-pipelines</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/more-control-over-app-deploys-in-cicd-pipelines</guid>
  </item>
  <item>
    <title>Migrate metafields with `shopify app import-custom-data-definitions`</title>
    <description><![CDATA[ <div class=""><p><code>shopify app import-custom-data-definitions</code> is now available in Shopify CLI version 3.89.</p>
<p>This command helps you migrate existing metafield and metaobject definitions for your app to <a href="https://shopify.dev/docs/apps/build/metafields/definitions#toml-app-owned-example" target="_blank" class="body-link">declarative TOML management</a>. All app-owned definitions configured on your dev store are automatically converted to their TOML equivalent. These definitions include those with a namespace like <code>$app</code> or metaobjects with a type like <code>$app:example</code>, You can review the TOML definitions and add them to your <code>shopify.app.toml</code> file. You can continue writing metafield and metaobject <em>values</em> without any changes.</p>
<p>You can migrate all your definitions at once, or you can work step by step by running the command multiple times. Run <code>shopify app dev</code> to test your TOML definitions in your dev store, then run <code>shopify app deploy</code> to deploy your new centrally managed Metafield and Metaobject definitions to all shops with your app installed. After you've deployed your changes, you can delete the unnecessary definition management code.</p>
<p>Declarative definitions offer several advantages over API management:</p>
<ul>
<li>Shopify updates declared definitions in every shop where your app is installed, ensuring consistency across installations.</li>
<li>Definitions stay in sync with your app's state, allowing you to roll out new metafields and related features simultaneously.</li>
<li>Definitions are version controlled as part of your app, making it easy to roll back.</li>
</ul>
<p>As always, feel free to reach out in the community forum to share your questions and feedback about using declarative metafield and metaobject definitions.</p>
</div> ]]></description>
    <pubDate>Thu, 22 Jan 2026 14:00:00 +0000</pubDate>
    <atom:published>2026-01-22T14:00:00.000Z</atom:published>
    <atom:updated>2026-01-22T14:00:00.000Z</atom:updated>
    <category>Tools</category>
    <category>New</category>
    <link>https://shopify.dev/changelog/migrate-metafields-with-shopify-app-import-custom-data-definitions</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/migrate-metafields-with-shopify-app-import-custom-data-definitions</guid>
  </item>
  <item>
    <title>Storefront API now returns a specific error code when Cart Transform Functions fail</title>
    <description><![CDATA[ <div class=""><p>As of API version 2026-04, the Storefront API will return a <code>MERCHANDISE_LINE_TRANSFORMERS_RUN_ERROR</code> <a href="https://shopify.dev/docs/api/storefront/latest/enums/CartErrorCode" target="_blank" class="body-link">cart error code</a> when a <a href="https://shopify.dev/docs/api/functions/latest/cart-transform" target="_blank" class="body-link">Cart Transform Function</a> encounters a runtime error during cart operations such as <a href="https://shopify.dev/docs/api/storefront/latest/mutations/cartCreate" target="_blank" class="body-link"><code>cartCreate</code></a> or <a href="https://shopify.dev/docs/api/storefront/latest/mutations/cartLinesAdd" target="_blank" class="body-link"><code>cartLinesAdd</code></a>.</p>
<p>Previously, when a Cart Transform Function failed, the Storefront API returned a generic <a href="https://shopify.dev/docs/api/storefront/latest/enums/CartErrorCode#enums-INVALID" target="_blank" class="body-link"><code>INVALID</code> error code</a> with the message &quot;An error occurred in your cart.&quot; This made it difficult to distinguish between failures in Cart Transform Functions and other validation errors programmatically.</p>
<p>With the introduction of the specific <code>MERCHANDISE_LINE_TRANSFORMERS_RUN_ERROR</code> code, you can now:</p>
<ul>
<li>Identify and handle Cart Transform Function failures separately from other cart errors.</li>
<li>Implement more precise error handling and debugging in your storefront.</li>
</ul>
<p>This change enhances your ability to maintain and troubleshoot your storefront implementation effectively.</p>
<p>Example error response:</p>
<pre><code>{
  &quot;data&quot;: {
    &quot;cartCreate&quot;: {
      &quot;cart&quot;: null,
      &quot;userErrors&quot;: [
        {
          &quot;code&quot;: &quot;MERCHANDISE_LINE_TRANSFORMERS_RUN_ERROR&quot;
        }
      ]
    }
  }
}
</code></pre>
</div> ]]></description>
    <pubDate>Wed, 21 Jan 2026 17:00:00 +0000</pubDate>
    <atom:published>2026-01-21T17:00:00.000Z</atom:published>
    <atom:updated>2026-01-21T17:00:00.000Z</atom:updated>
    <category>API</category>
    <category>Update</category>
    <category>Storefront API</category>
    <category>2026-04</category>
    <link>https://shopify.dev/changelog/storefront-api-now-returns-a-specific-error-code-when-cart-transform-functions-fail</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/storefront-api-now-returns-a-specific-error-code-when-cart-transform-functions-fail</guid>
  </item>
  <item>
    <title>Shop Minis development now requires Partner account permissions</title>
    <description><![CDATA[ <div class=""><p>The Shop Minis CLI has been updated to ensure only authorized team members can create and manage Shop Minis. This is done by verifying the necessary permissions within your Partner organization.</p>
<h3>What's changing</h3>
<p>To develop Shop Minis, you must now have the <strong>Manage apps</strong> permission enabled on your Partner account. Without this permission, CLI commands will result in an error.</p>
<p>This change affects CLI actions such as:</p>
<ul>
<li>Setting up a new Mini</li>
<li>Submitting, canceling, and checking submissions</li>
</ul>
<h3>What you need to do</h3>
<p><strong>For organization owners or admins</strong></p>
<ol>
<li>Log in to your <a href="https://partners.shopify.com" target="_blank" class="body-link">Partner Dashboard</a>.</li>
<li>Navigate to <strong>Settings</strong> → <strong>Team</strong>.</li>
<li>Find the developer who needs access.</li>
<li>Edit their profile to adjust permissions.</li>
<li>Enable <strong>Manage apps</strong> under <strong>Sensitive permissions</strong>.</li>
<li>Save the changes.</li>
</ol>
<p><strong>For developers:</strong></p>
<p>Request that your organization owner or admin grants you the <strong>Manage apps</strong> permission.</p>
<p>After permissions are updated, you can begin developing and submitting Minis within your Partner organization.</p>
<h3>Learn more</h3>
<ul>
<li><a href="https://shopify.dev/docs/api/shop-minis#permissions" target="_blank" class="body-link">Shop Minis permissions docs</a></li>
</ul>
</div> ]]></description>
    <pubDate>Sat, 17 Jan 2026 17:00:00 +0000</pubDate>
    <atom:published>2026-01-17T17:00:00.000Z</atom:published>
    <atom:updated>2026-01-17T17:00:00.000Z</atom:updated>
    <category>Action Required</category>
    <category>API</category>
    <category>Breaking API Change</category>
    <category>Shop Minis</category>
    <link>https://shopify.dev/changelog/shop-minis-development-now-requires-partner-account-permissions</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/shop-minis-development-now-requires-partner-account-permissions</guid>
  </item>
  <item>
    <title>Deprecating shopify_y and shopify_s cookies for Hydrogen</title>
    <description><![CDATA[ <div class=""><p>Shopify will stop setting the <code>shopify_y</code> and <code>shopify_s</code> cookies in 2026.</p>
<p>If you use these cookies, your storefront will continue to work normally. However, if you don’t upgrade, visitor and session attribution won't be reliable in in Shopify Analytics.</p>
<p><strong>For Hydrogen storefronts, upgrade by April 30, 2026.</strong></p>
<p>What you need to do:</p>
<ul>
<li><p>If you’re using Hydrogen (React Router) deployed to Oxygen: Run the Hydrogen CLI upgrade command. All Hydrogen versions from 2024.7 through 2025.7 include this fix.</p>
</li>
<li><p>For other setups: See instructions in the <a href="https://shopify.dev/docs/storefronts/headless/hydrogen/migrate/cookies" target="_blank" class="body-link">dev docs</a>.</p>
</li>
</ul>
</div> ]]></description>
    <pubDate>Sat, 17 Jan 2026 17:00:00 +0000</pubDate>
    <atom:published>2026-01-17T17:00:00.000Z</atom:published>
    <atom:updated>2026-01-17T17:00:00.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <link>https://shopify.dev/changelog/tracking-cookie-deprecation-hydrogen</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/tracking-cookie-deprecation-hydrogen</guid>
  </item>
  <item>
    <title>Stricter Liquid parsing for themes and theme app extensions</title>
    <description><![CDATA[ <div class=""><p>Starting January 13, 2026, Shopify is enforcing stricter Liquid parsing for all themes. This improves code quality, prevents syntax errors, and enables future Liquid enhancements.</p>
<p>If your theme contains Liquid code that doesn't meet the stricter parsing requirements, we'll automatically rewrite those files to be compatible. Updated files will include a comment explaining what changed. The rewrite process preserves your theme's functionality and appearance while fixing syntax issues that could cause problems in the future.</p>
<p>If you're developing new themes or theme app extensions, all new submissions to the Theme Store and App Store already require strict-parsable Liquid code. This ensures new code meets the higher quality standards from the start.</p>
<p>View the <a href="https://shopify.dev/docs/storefronts/themes/tools/strict-liquid-migration" target="_blank" class="body-link">migration guide</a> for detailed information on updating your code. </p>
</div> ]]></description>
    <pubDate>Tue, 13 Jan 2026 20:00:00 +0000</pubDate>
    <atom:published>2026-01-13T20:00:00.000Z</atom:published>
    <atom:updated>2026-01-13T22:13:28.000Z</atom:updated>
    <category>Themes</category>
    <category>Update</category>
    <link>https://shopify.dev/changelog/liquid-is-getting-faster-and-ready-to-evolve</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/liquid-is-getting-faster-and-ready-to-evolve</guid>
  </item>
  <item>
    <title>Standardization of Asset URL Version Parameters</title>
    <description><![CDATA[ <div class=""><p>We're updating the format of versioning query parameters appended to store assets such as CSS and JS. Previously, some assets used a bare numeric query parameter, (for example, <code>?108</code>), while others used a key-value format with the <code>v</code> query parameter. Moving forward, all asset URLs will consistently use the <code>?v=VERSION_STRING</code> format for versioning.
The new format will be returned by liquid tags and will be present in Shopify-rendered storefront HTML.</p>
<p>For example, an asset URL that previously looked like this:
<a href="https://shop.example.com/cdn/shop/t/7/compiled_assets/styles.css?108" target="_blank" class="body-link">https://shop.example.com/cdn/shop/t/7/compiled_assets/styles.css?108</a></p>
<p>Will now look like this:
<a href="https://shop.example.com/cdn/shop/t/7/compiled_assets/styles.css?v=108" target="_blank" class="body-link">https://shop.example.com/cdn/shop/t/7/compiled_assets/styles.css?v=108</a></p>
<p>These changes are being made to support upcoming infrastructure improvements.</p>
<h1>Action Required:</h1>
<p><strong>Most themes will not require any changes.</strong> Themes utilizing standard Liquid asset filters to generate URLs will automatically output the updated format.</p>
<p>However, you should ensure that any app or custom theme code that uses asset URLs doesn’t require them to be expressed in the old bare numeric format. Regular expressions or logic specifically expecting a query string ending in only numbers should be updated to support the <code>?v=</code> format.</p>
</div> ]]></description>
    <pubDate>Mon, 12 Jan 2026 17:00:00 +0000</pubDate>
    <atom:published>2026-01-12T17:00:00.000Z</atom:published>
    <atom:updated>2026-01-12T19:18:55.000Z</atom:updated>
    <category>Action Required</category>
    <category>API</category>
    <category>Update</category>
    <link>https://shopify.dev/changelog/standardization-of-asset-url-version-parameters</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/standardization-of-asset-url-version-parameters</guid>
  </item>
  <item>
    <title>Deprecated `deliveryShippingOriginAssign` mutation</title>
    <description><![CDATA[ <div class=""><p>Support for legacy mode profiles in shipping has been discontinued, as this feature has been inactive for some time. Consequently, the GraphQL Admin API is being updated to align with this change.</p>
<p>The following mutation is now marked as deprecated:</p>
<ul>
<li><a href="https://shopify.dev/docs/api/admin-graphql/latest/mutations/deliveryShippingOriginAssign" target="_blank" class="body-link"><code>deliveryShippingOriginAssign</code></a></li>
</ul>
<p>Developers are advised to cease using this mutation, as it will be removed in a future API version. To ensure compatibility with upcoming updates, developers should explore alternative methods for assigning shipping origins within the current API framework.</p>
</div> ]]></description>
    <pubDate>Thu, 08 Jan 2026 17:00:00 +0000</pubDate>
    <atom:published>2026-01-08T17:00:00.000Z</atom:published>
    <atom:updated>2026-01-09T01:14:51.000Z</atom:updated>
    <category>API</category>
    <category>Deprecation announcement</category>
    <category>Admin GraphQL API</category>
    <category>2026-04</category>
    <link>https://shopify.dev/changelog/deprecate-deliveryshippingoriginassign-mutation</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/deprecate-deliveryshippingoriginassign-mutation</guid>
  </item>
  <item>
    <title>Access transactions on the Return object</title>
    <description><![CDATA[ <div class=""><p>You can now access transaction data directly from the <code>Return</code> object in the Admin GraphQL API. This new <code>transactions</code> connection simplifies your ability to associate payments and refunds with specific returns, removing the need to deduce relationships based on amounts and timestamps. This helps ensure accurate financial reporting and reconciliation for integrations.</p>
<p>The <code>transactions</code> connection is populated for the following scenarios:</p>
<ul>
<li><strong>POS returns and exchanges</strong>: Includes both refunds and captured payments.</li>
<li><strong>Online returns and exchanges</strong>: Includes refunds only.</li>
</ul>
<p>Here's an example of how to query transactions on a return:</p>
<pre><code class="language-graphql">query {
  return(id: &quot;gid://shopify/Return/123&quot;) {
    transactions(first: 5) {
      edges {
        node {
          id
          kind
          status
          amountSet {
            shopMoney {
              amount
              currencyCode
            }
          }
        }
      }
    }
  }
}
</code></pre>
<p>For more details, refer to the <a href="https://shopify.dev/docs/api/admin-graphql/latest/queries/return?#returns-Return.fields.transactions" target="_blank" class="body-link">Return object documentation</a>.</p>
</div> ]]></description>
    <pubDate>Thu, 01 Jan 2026 17:00:00 +0000</pubDate>
    <atom:published>2026-01-01T17:00:00.000Z</atom:published>
    <atom:updated>2026-01-12T21:31:10.000Z</atom:updated>
    <category>API</category>
    <category>Update</category>
    <category>Admin GraphQL API</category>
    <category>2026-01</category>
    <link>https://shopify.dev/changelog/access-transactions-on-the-return-object</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/access-transactions-on-the-return-object</guid>
  </item>
  <item>
    <title>New Return Reason Definitions API for Better Return Insights</title>
    <description><![CDATA[ <div class=""><p>You can now use the new <code>ReturnReasonDefinition</code> type to capture more granular, category-specific return reasons when managing returns. This replaces the previous <code>ReturnReason</code> enum with a richer data model that helps provide merchants with better insights in their return analytics, and more tailored return experiences for their buyers.</p>
<h3>What's new</h3>
<ul>
<li>A new <a href="https://shopify.dev/docs/api/admin-graphql/2026-01/objects/ReturnReasonDefinition" target="_blank" class="body-link"><code>ReturnReasonDefinition</code></a> type with <code>id</code>, <code>handle</code>, and <code>name</code> fields. Use the stable <code>handle</code> for programmatic logic.</li>
<li>The <a href="https://shopify.dev/docs/api/admin-graphql/2026-01/queries/returnReasonDefinitions" target="_blank" class="body-link"><code>returnReasonDefinitions</code></a> query retrieves the full library of available return reasons.</li>
<li>A new <code>suggestedReturnReasonDefinitions</code> connection on <a href="https://shopify.dev/docs/api/admin-graphql/2026-01/objects/LineItem#field-LineItem.fields.suggestedReturnReasonDefinitions" target="_blank" class="body-link"><code>LineItem</code></a> provides return reasons tailored to each product's category.</li>
<li>The <a href="https://shopify.dev/docs/api/admin-graphql/2026-01/mutations/returnCreate" target="_blank" class="body-link"><code>returnCreate</code></a>, <a href="https://shopify.dev/docs/api/admin-graphql/2026-01/mutations/returnRequest" target="_blank" class="body-link"><code>returnRequest</code></a>, and <a href="https://shopify.dev/docs/api/customer/2026-01/mutations/orderRequestReturn" target="_blank" class="body-link"><code>orderRequestReturn</code></a> mutations now accept <code>returnReasonDefinitionId</code> in their line item inputs.</li>
<li>Access <code>returnReasonDefinition</code> on <a href="https://shopify.dev/docs/api/admin-graphql/2026-01/objects/ReturnLineItem" target="_blank" class="body-link"><code>ReturnLineItem</code></a> and <a href="https://shopify.dev/docs/api/admin-graphql/2026-01/objects/UnverifiedReturnLineItem" target="_blank" class="body-link"><code>UnverifiedReturnLineItem</code></a> types.</li>
</ul>
<h3>Deprecations</h3>
<p>The <code>returnReason</code> field on input types and return line item types is deprecated. Use <code>returnReasonDefinitionId</code> for inputs and <code>returnReasonDefinition</code> for reading return data.</p>
<h3>Migration</h3>
<p>If your app creates returns, update your mutations to use <code>returnReasonDefinitionId</code> instead of <code>returnReason</code>. Query <code>suggestedReturnReasonDefinitions</code> on <code>LineItem</code> to get contextually relevant reasons for each product. For reading returns, update your queries to use <code>returnReasonDefinition</code> instead of <code>returnReason</code>.</p>
<p>These changes are available in API version 2026-01.</p>
</div> ]]></description>
    <pubDate>Thu, 01 Jan 2026 17:00:00 +0000</pubDate>
    <atom:published>2026-01-01T17:00:00.000Z</atom:published>
    <atom:updated>2026-01-01T17:00:00.000Z</atom:updated>
    <category>API</category>
    <category>Update</category>
    <category>Admin GraphQL API</category>
    <category>Customer Account API</category>
    <category>Events &amp; webhooks</category>
    <category>2026-01</category>
    <link>https://shopify.dev/changelog/new-return-reason-definitions-api-for-better-return-insights</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/new-return-reason-definitions-api-for-better-return-insights</guid>
  </item>
  <item>
    <title>`INVALID_BILLING_ADDRESS`: new processing error for subscription billing attempts</title>
    <description><![CDATA[ <div class=""><p>We've added a new processing error for subscription billing attempts: <a href="https://shopify.dev/docs/api/admin-graphql/latest/interfaces/SubscriptionBillingAttemptProcessingError#possible-types-SubscriptionBillingAttemptGenericError.fields.code.INVALID_BILLING_ADDRESS" target="_blank" class="body-link"><code>INVALID_BILLING_ADDRESS</code></a>.</p>
<p>This error is returned when one or more fields in the billing address contain invalid data. Validated fields include:</p>
<ul>
<li><code>firstName</code> or <code>lastName</code></li>
<li><code>address1</code> or <code>address2</code></li>
<li><code>city</code></li>
<li><code>province</code> or <code>provinceCode</code></li>
<li><code>country</code> or <code>countryCode</code></li>
<li><code>zip</code> (postal code)</li>
<li><code>phone</code></li>
<li><code>company</code></li>
</ul>
</div> ]]></description>
    <pubDate>Thu, 01 Jan 2026 17:00:00 +0000</pubDate>
    <atom:published>2026-01-01T17:00:00.000Z</atom:published>
    <atom:updated>2026-01-01T17:00:00.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <category>Admin GraphQL API</category>
    <category>2026-01</category>
    <link>https://shopify.dev/changelog/subscription-billing-attempt-invalid-billing-address-error</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/subscription-billing-attempt-invalid-billing-address-error</guid>
  </item>
  <item>
    <title>Subscription billing attempts throttling</title>
    <description><![CDATA[ <div class=""><p>Beginning in API version 2026-01, billing attempts will be throttled based on internal trust metrics to prevent abuse. If an attempt is throttled, it will be visible in the new <code>throttled</code> error code on the <a href="https://shopify.dev/docs/api/admin-graphql/latest/enums/BillingAttemptUserErrorCode" target="_blank" class="body-link"><code>BillingAttemptUserErrorCode</code></a> enum.</p>
</div> ]]></description>
    <pubDate>Thu, 01 Jan 2026 17:00:00 +0000</pubDate>
    <atom:published>2026-01-01T17:00:00.000Z</atom:published>
    <atom:updated>2026-01-01T17:00:00.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <category>Admin GraphQL API</category>
    <category>2026-01</category>
    <link>https://shopify.dev/changelog/subscription-billing-attempts-throttling</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/subscription-billing-attempts-throttling</guid>
  </item>
  <item>
    <title>Introducing the `orders/link_requested` webhook topic</title>
    <description><![CDATA[ <div class=""><p>Starting with API version 2026-01 of the GraphQL Admin API, your app can subscribe to the <code>orders/link_requested</code> webhook topic. This webhook is triggered when a customer requests a new order link from an expired <strong>Order status</strong> page, allowing your app to be notified when customers need access to their order details after the original link has expired.</p>
<p><strong>Webhook Trigger:</strong> This occurs when a customer visits an expired order status page and requests a new order link.</p>
<p><strong>Payload:</strong> The webhook delivers the complete <a href="https://shopify.dev/api/admin-graphql/unstable/objects/Order" target="_blank" class="body-link"><code>Order</code></a> object, which includes:</p>
<ul>
<li>Order ID and details</li>
<li>Customer information</li>
<li>Order status</li>
<li>Fulfillment information</li>
</ul>
<p>For more information and to view the full payload, visit the <a href="https://shopify.dev/docs/api/webhooks/latest?accordionItem=webhooks-orders-link_requested&reference=toml" target="_blank" class="body-link">Shopify developer documentation</a>.</p>
</div> ]]></description>
    <pubDate>Thu, 01 Jan 2026 17:00:00 +0000</pubDate>
    <atom:published>2026-01-01T17:00:00.000Z</atom:published>
    <atom:updated>2026-01-07T21:40:36.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <category>Admin GraphQL API</category>
    <category>Events &amp; webhooks</category>
    <category>2026-01</category>
    <link>https://shopify.dev/changelog/introducing-the-orderslinkrequested-webhook-topic</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/introducing-the-orderslinkrequested-webhook-topic</guid>
  </item>
  <item>
    <title>Metafield references added to Customer Account API</title>
    <description><![CDATA[ <div class=""><p>We have added <code>metafield.reference</code> and <code>metafield.references</code> to the Customer Account API. This means that reference <code>Media</code> types, including <a href="https://shopify.dev/docs/api/customer/unstable/objects/MediaImage" target="_blank" class="body-link">MediaImage</a>, <a href="https://shopify.dev/docs/api/customer/unstable/objects/GenericFile" target="_blank" class="body-link">GenericFile</a>, <a href="https://shopify.dev/docs/api/customer/unstable/objects/Model3d" target="_blank" class="body-link">Model3d</a>, and <a href="https://shopify.dev/docs/api/customer/unstable/objects/Video" target="_blank" class="body-link">Video</a>, now exist on the common query objects that currently support metafields on the Customer Account API.</p>
<p>Metaobjects can now also be queried through <code>metafield.reference</code> on the Customer Account API. To enable access to metaobjects, toggle the Customer Account API access toggle when editing a metaobject definition in Admin. After toggling this value on, metaobjects are exposed and accessible to apps with <a href="https://shopify.dev/docs/api/usage/access-scopes#customer-access-scopes" target="_blank" class="body-link">the customer_read_metaobjects scope</a>.</p>
<p>This functionality can also be achieved with new changes to the GraphQL Admin API. We have exposed the ability to create, update, and query <code>CustomerAccess</code>, which can be set to either <code>READ</code> or <code>NONE</code>. You can specify the access on the <a href="https://shopify.dev/docs/api/admin-graphql/unstable/objects/MetaobjectAccess" target="_blank" class="body-link">MetaobjectAccess</a> object when running the <a href="https://shopify.dev/docs/api/admin-graphql/unstable/mutations/metaobjectdefinitioncreate" target="_blank" class="body-link">metaobjectDefinitionCreate</a> or <a href="https://shopify.dev/docs/api/admin-graphql/unstable/mutations/metaobjectdefinitionupdate" target="_blank" class="body-link">metaobjectDefinitionUpdate</a> mutation.</p>
<p>Below are some example queries of Media types and metaobjects.</p>
<ol>
<li>Querying a Media object metafield.reference (MediaImage) through customer:</li>
</ol>
<pre><code>	query {
		customer {
			metafield(namespace: &quot;custom&quot;, key: &quot;example&quot;) {
				namespace
				key
				jsonValue
				reference {
					__typename
					... on MediaImage {
						image {
							url
						}
					}
				}
			}
		}
	}
</code></pre>
<ol start="2">
<li>Querying a metaobject metafield.reference through an order (note, the metaobject contains a MediaImage reference):</li>
</ol>
<pre><code>	order(id: &quot;gid://shopify/Order/1&quot;) {
		metafield(namespace: &quot;custom&quot;, key: &quot;example&quot;) {
			__typename
			namespace
			key
			reference {
				__typename
				... on Metaobject {
					id
					fields {
						type
						value
						key
						value
						reference {
							__typename
							... on MediaImage {
								id
								image {
									altText
									url
								}
							}
						}
					}
				}
			}
		}
	}
</code></pre>
</div> ]]></description>
    <pubDate>Thu, 01 Jan 2026 05:00:00 +0000</pubDate>
    <atom:published>2026-01-01T05:00:00.000Z</atom:published>
    <atom:updated>2026-01-01T05:00:00.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <category>Customer Account API</category>
    <category>Admin GraphQL API</category>
    <category>2026-01</category>
    <link>https://shopify.dev/changelog/metafield-references-added-to-customer-account-api</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/metafield-references-added-to-customer-account-api</guid>
  </item>
  <item>
    <title>Due on Fulfillment payment term available for pre-orders</title>
    <description><![CDATA[ <div class=""><p>In the API <code>2026-01</code> release candidate version, a new value, <code>ON_FULFILLMENT</code>, has been added to the <a href="https://shopify.dev/docs/api/admin-graphql/2026-01/enums/SellingPlanRemainingBalanceChargeTrigger" target="_blank" class="body-link"><code>SellingPlanRemainingBalanceChargeTrigger</code></a> enum. This value allows you to set payments for pre-orders to be processed upon order fulfillment, providing flexibility in managing deferred payments. </p>
<p>For implementation details and further information, see the <a href="https://shopify.dev/docs/apps/build/purchase-options/deferred" target="_blank" class="body-link">pre-orders documentation</a>.</p>
</div> ]]></description>
    <pubDate>Thu, 01 Jan 2026 05:00:00 +0000</pubDate>
    <atom:published>2026-01-01T05:00:00.000Z</atom:published>
    <atom:updated>2026-01-01T05:00:00.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <category>Admin GraphQL API</category>
    <category>2026-01</category>
    <link>https://shopify.dev/changelog/due-on-fulfillment-payment-term-available-for-pre-orders</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/due-on-fulfillment-payment-term-available-for-pre-orders</guid>
  </item>
  <item>
    <title>Deprecation of `Shop.billingAddress` in favor of `Shop.shopAddress`</title>
    <description><![CDATA[ <div class=""><p>As of API version 2026-01, the <a href="https://shopify.dev/docs/api/admin-graphql/2026-01/objects/shop#field-Shop.fields.shopAddress" target="_blank" class="body-link"><code>shopAddress</code> field will be introduced to the <code>Shop</code> object</a> in the GraphQL Admin API. This new field replaces the now-deprecated <code>billingAddress</code> field, which will be removed in a future version. <code>shopAddress</code> will have identical structure and values as <code>billingAddress</code>. </p>
<p>Billing account address currently corresponds to the shop address. This change makes that relationship clearer, and supports potential future separation of billing and shop addresses.</p>
<h3>Action required</h3>
<p>You should update your queries to use the new <code>shopAddress</code> field when accessing the <code>Shop</code> object in the GraphQL Admin API. Replace instances of <code>shop { billingAddress { ... } }</code> with <code>shop { shopAddress { ... } }</code>. </p>
<p>For example, update your query from:</p>
<pre><code class="language-graphql">query ShopAddress {
  shop {
    billingAddress {
      address1
      address2
      city
      province
      zip
      country
    }
  }
}
</code></pre>
<p>to:</p>
<pre><code class="language-graphql">query ShopAddress {
  shop {
    shopAddress {
      address1
      address2
      city
      province
      zip
      country
    }
  }
}
</code></pre>
<p>By making these changes, you ensure compatibility with future API versions.</p>
</div> ]]></description>
    <pubDate>Mon, 22 Dec 2025 17:00:00 +0000</pubDate>
    <atom:published>2025-12-22T17:00:00.000Z</atom:published>
    <atom:updated>2025-12-22T17:00:00.000Z</atom:updated>
    <category>Action Required</category>
    <category>API</category>
    <category>Deprecation announcement</category>
    <category>Admin GraphQL API</category>
    <category>2026-01</category>
    <link>https://shopify.dev/changelog/deprecation-of-shop-billingaddress-in-favor-of-shop-shopaddress</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/deprecation-of-shop-billingaddress-in-favor-of-shop-shopaddress</guid>
  </item>
  <item>
    <title>Removing `permitsSkuSharing` field from fulfillment service</title>
    <description><![CDATA[ <div class=""><p>As of API version 2026-04, we've removed the <code>permitsSkuSharing</code> field from the <a href="https://shopify.dev/docs/api/admin-graphql/latest/objects/FulfillmentService" target="_blank" class="body-link"><code>FulfillmentService</code></a> object and from the <a href="https://shopify.dev/docs/api/admin-graphql/latest/mutations/fulfillmentServiceCreate" target="_blank" class="body-link"><code>fulfillmentServiceCreate</code></a> and <a href="https://shopify.dev/docs/api/admin-graphql/latest/mutations/fulfillmentserviceupdate" target="_blank" class="body-link"><code>fulfillmentServiceUpdate</code></a> mutations. SKU sharing will be enabled by default for all fulfillment services.</p>
<h3>Why we made this change</h3>
<p>By enabling <code>permitsSkuSharing</code> for all fulfillment services, we're standardizing inventory behavior across fulfillment services and simplifying the API. Previously, having <code>permitsSkuSharing</code> set to disabled would restrict inventory to a single location. This didn't always represent how the merchant's inventory item was setup in the real world.</p>
<h3>Impact on your app</h3>
<ul>
<li><strong>GraphQL</strong>: In the <code>unstable</code> or <code>2026-04</code> and later releases, if you are querying for the <code>permitsSkuSharing</code> field or sending it in mutations in API version, you will begin receiving errors. </li>
<li><strong>REST</strong>: In the <code>unstable</code> or <code>2026-04</code> and later releases, the <code>permitsSkuSharing</code> field won't be returned in <code>GET</code> requests. In <code>POST</code> and <code>PUT</code> requests, the <code>permitsSkuSharing</code> argument will be ignored.</li>
<li><code>permitsSkuSharing</code> will be enabled for all fulfillment services.</li>
<li>When <code>permitsSkuSharing</code> was disabled, inventory could only be stocked at a single location. With it enabled for all fulfillment services, inventory can be stocked at multiple locations.</li>
</ul>
<h3>What you need to do</h3>
<ul>
<li>Remove any reads/writes of <code>permitsSkuSharing</code> from your code for the <code>unstable</code> or <code>2026-04</code> and later releases.</li>
<li>Review any business logic that assumed inventory could only be stocked at a single location for a fulfillment service.</li>
</ul>
</div> ]]></description>
    <pubDate>Fri, 19 Dec 2025 17:00:00 +0000</pubDate>
    <atom:published>2025-12-19T17:00:00.000Z</atom:published>
    <atom:updated>2025-12-19T17:00:00.000Z</atom:updated>
    <category>Action Required</category>
    <category>API</category>
    <category>Breaking API Change</category>
    <category>Admin GraphQL API</category>
    <category>Admin REST API</category>
    <category>2026-04</category>
    <link>https://shopify.dev/changelog/removing-permitsskusharing-field-from-fulfillment-service</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/removing-permitsskusharing-field-from-fulfillment-service</guid>
  </item>
  <item>
    <title>Conversion tracking fields added to MarketingEngagementCreate</title>
    <description><![CDATA[ <div class=""><p>To improve the integration of marketing platforms that track conversions beyond traditional sales metrics, we have added new fields to the <code>MarketingEngagementCreateInput</code> and <code>MarketingEngagement</code> objects on the <code>MarketingEngagementCreate</code> mutation. These enhancements enable more comprehensive data integration into Shopify's marketing reports.</p>
<p>The new fields are:</p>
<ul>
<li><strong>primaryConversions</strong>: This field tracks the main conversion events, such as purchases or sign-ups, that are most critical to your marketing goals.</li>
<li><strong>allConversions</strong>: This field captures all types of conversion events, providing a complete view of customer interactions.</li>
</ul>
<p>For more information on sharing marketing data, please visit our <a href="https://help.shopify.com/en/manual/promoting-marketing/analyze-marketing/app-data-sharing" target="_blank" class="body-link">help page</a>.</p>
</div> ]]></description>
    <pubDate>Fri, 19 Dec 2025 17:00:00 +0000</pubDate>
    <atom:published>2025-12-19T17:00:00.000Z</atom:published>
    <atom:updated>2025-12-19T17:00:00.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <category>Admin GraphQL API</category>
    <category>2026-01</category>
    <link>https://shopify.dev/changelog/conversion-tracking-fields-added-to-marketing-engagement-create</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/conversion-tracking-fields-added-to-marketing-engagement-create</guid>
  </item>
  <item>
    <title>Storefront API now returns errors when adding a gift card to a cart with missing or invalid recipient details</title>
    <description><![CDATA[ <div class=""><p>As of API version <code>2026-01</code>, the Storefront API returns a <code>GIFT_CARD_RECIPIENT_INVALID</code> error when adding a gift card to a cart with missing or invalid recipient details, such as in <a href="https://shopify.dev/docs/storefronts/themes/product-merchandising/gift-cards#create-a-form-to-collect-recipient-information" target="_blank" class="body-link">this example</a>.</p>
<p>Previously, when adding a gift card to a cart using either the <code>cartCreate</code> or <code>cartLinesAdd</code> mutations, an empty cart and empty <code>userErrors</code> would be returned if any of the recipient details were invalid, such as a missing email address. With this change a <code>GIFT_CARD_RECIPIENT_INVALID</code> error is returned for both <a href="https://shopify.dev/docs/api/storefront/2026-01/mutations/cartcreate#returns-userErrors.fields.code.GIFT_CARD_RECIPIENT_INVALID" target="_blank" class="body-link"><code>cartCreate</code></a> or <a href="https://shopify.dev/docs/api/storefront/2026-01/mutations/cartlinesadd#returns-userErrors.fields.code.GIFT_CARD_RECIPIENT_INVALID" target="_blank" class="body-link"><code>cartLinesAdd</code></a> mutations, so that you can use the information to surface gift card recipient errors back to the client.</p>
</div> ]]></description>
    <pubDate>Fri, 19 Dec 2025 17:00:00 +0000</pubDate>
    <atom:published>2025-12-19T17:00:00.000Z</atom:published>
    <atom:updated>2025-12-19T17:00:00.000Z</atom:updated>
    <category>API</category>
    <category>Update</category>
    <category>Storefront API</category>
    <category>2026-01</category>
    <link>https://shopify.dev/changelog/storefront-api-now-returns-errors-when-adding-a-gift-card-to-a-cart-with-missing-or-invalid-recipient-details</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/storefront-api-now-returns-errors-when-adding-a-gift-card-to-a-cart-with-missing-or-invalid-recipient-details</guid>
  </item>
  <item>
    <title>Customer marketing URL fields now require write access</title>
    <description><![CDATA[ <div class=""><p><strong>Effective immediately</strong>: The following customer-related fields now require the <code>write_customers</code> scope and the <code>create_and_edit_customers</code> permission:</p>
<ul>
<li><code>Customer.emailOpenTrackingUrl</code> (deprecated)</li>
<li><code>Customer.unsubscribeUrl</code> (deprecated)</li>
<li><code>CustomerEmailAddress.openTrackingUrl</code></li>
<li><code>CustomerEmailAddress.marketingUnsubscribeUrl</code></li>
<li><code>CustomerPhoneNumber.marketingUnsubscribeUrl</code></li>
</ul>
<p><strong>Reason for change</strong></p>
<p>This update addresses a security vulnerability. These fields return URLs with secret tokens that can modify customer marketing consent, such as unsubscribing a customer. Previously, apps with only the <code>read_customers</code> scope could access these URLs, potentially leading to unauthorized changes to customer preferences. By updating the access requirements, we aim to prevent such security risks.</p>
<p>According to our <a href="https://vault.shopify.io/page/Types-of-changes~dhb7e32.md#security-fixes" target="_blank" class="body-link">API breaking change policy</a>, security fixes are implemented immediately across all API versions, bypassing the standard deprecation process.</p>
<p><strong>Action required</strong></p>
<p>If your app queries these fields, you must:</p>
<ol>
<li>Update your app to include the <code>write_customers</code> access scope. Previously, the <code>read_customers</code> scope was sufficient.</li>
<li>Ensure the user making the request has the <code>create_and_edit_customers</code> permission.</li>
</ol>
<p>Apps that only have the <code>read_customers</code> scope will now encounter an access denied error when attempting to query these fields.</p>
</div> ]]></description>
    <pubDate>Thu, 18 Dec 2025 17:00:00 +0000</pubDate>
    <atom:published>2025-12-18T17:00:00.000Z</atom:published>
    <atom:updated>2025-12-18T17:00:00.000Z</atom:updated>
    <category>Action Required</category>
    <category>API</category>
    <category>Breaking API Change</category>
    <category>Admin GraphQL API</category>
    <link>https://shopify.dev/changelog/customer-marketing-url-fields-now-require-write-access</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/customer-marketing-url-fields-now-require-write-access</guid>
  </item>
  <item>
    <title>Discount Function support for rejecting discount codes</title>
    <description><![CDATA[ <div class=""><p>The <a href="https://shopify.dev/docs/api/functions/reference/discount" target="_blank" class="body-link"><code>Discount Function API</code></a> now supports discount code rejection, allowing apps to conditionally reject discount codes with a custom message.</p>
<p>With discount rejection for the Discount Function API, merchants can:</p>
<ul>
<li>Prevent double discounting on sale prices</li>
<li>Manage fine-grained combinations of discount codes</li>
<li>Disqualify certain products from discounts</li>
</ul>
<p>For more information on discount rejections, visit the <a href="https://shopify.dev/docs/apps/build/discounts/discount-rejections?extension=rust" target="_blank" class="body-link">tutorial</a>.</p>
</div> ]]></description>
    <pubDate>Wed, 17 Dec 2025 17:00:00 +0000</pubDate>
    <atom:published>2025-12-17T17:00:00.000Z</atom:published>
    <atom:updated>2025-12-17T17:00:00.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <category>Functions</category>
    <category>2026-01</category>
    <link>https://shopify.dev/changelog/discount-rejection-support-for-discount-functions</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/discount-rejection-support-for-discount-functions</guid>
  </item>
  <item>
    <title>Set and retrieve `processedAt` in the `refundCreate` mutation</title>
    <description><![CDATA[ <div class=""><p>We have introduced a new <code>processedAt</code> input field to the <a href="https://shopify.dev/docs/api/admin-graphql/2026-01/mutations/refundcreate" target="_blank" class="body-link"><code>refundCreate</code> mutation</a>. With this field, you can manage refund timestamps in your records more effectively.</p>
<p>If you don't provide a <code>processedAt</code> value, then the current timestamp is used by default. This ensures that existing integrations continue to function without modification.</p>
<h3>What's new</h3>
<p>The <code>refundCreate</code> mutation now includes an optional <code>processedAt</code> field, enabling you to specify the exact time a refund was processed. This feature is particularly useful for:</p>
<ul>
<li><strong>Processing backdated refunds</strong>: Manage refunds initiated offline or those that need to reflect a specific processing date for accounting purposes.</li>
<li><strong>Maintaining accurate financial records</strong>: Ensure your refund timestamps align with your actual business operations and reporting periods.</li>
</ul>
<h3>How it works</h3>
<p>To use this feature, include the <code>processedAt</code> field when creating a refund:</p>
<pre><code class="language-graphql">mutation refundCreate($input: RefundInput!) {
  refundCreate(input: $input) {
    refund {
      id
      processedAt
      createdAt
    }
    userErrors {
      field
      message
    }
  }
}
</code></pre>
<p>With input:</p>
<pre><code class="language-json">{
  &quot;input&quot;: {
    &quot;orderId&quot;: &quot;gid://shopify/Order/123&quot;,
    &quot;processedAt&quot;: &quot;2024-12-01T10:30:00Z&quot;,
    &quot;refundLineItems&quot;: [...]
  }
}
</code></pre>
<p>If you don't provide a <code>processedAt</code> value, the current timestamp is used by default. This ensures that existing integrations continue to function without modification.</p>
</div> ]]></description>
    <pubDate>Tue, 16 Dec 2025 18:00:00 +0000</pubDate>
    <atom:published>2025-12-16T18:00:00.000Z</atom:published>
    <atom:updated>2025-12-16T18:00:00.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <category>Admin GraphQL API</category>
    <category>2026-01</category>
    <link>https://shopify.dev/changelog/set-processed-at-in-refund-create</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/set-processed-at-in-refund-create</guid>
  </item>
  <item>
    <title>Venmo and PayPal are now treated as separate payment methods</title>
    <description><![CDATA[ <div class=""><p>Starting in API version <code>2026-01</code>, Venmo and PayPal are treated as separate payment methods when using payment customization functions. Previously, hiding PayPal's express checkout placement would automatically hide Venmo as well. With this change, you can now hide or show Venmo independently from PayPal in your payment customization logic.</p>
<h2>Action required</h2>
<p>If you were previously hiding PayPal's accelerated checkout placement to also hide Venmo, you must now explicitly hide Venmo separately in your payment customization function.</p>
<h3>Previous behavior (automatic):</h3>
<ul>
<li>Hiding PayPal's <a href="https://shopify.dev/docs/api/functions/2026-01/payment-customization#Input.fields.paymentMethods.placements.ACCELERATED_CHECKOUT" target="_blank" class="body-link"><code>ACCELERATED_CHECKOUT</code></a> placement would automatically hide Venmo.</li>
</ul>
<pre><code class="language-javascript">export function run(input) {
  const operations = [];

  const paypal = input.paymentMethods.find(method =&gt;
    method.name.includes(&quot;PayPal&quot;)
  );

  if (paypal &amp;&amp; shouldHidePayPal(input)) {
    operations.push({
      paymentMethodHide: { paymentMethodId: paypal.id }
    });
    // Venmo was implicitly hidden
  }

  return { operations };
  
}
</code></pre>
<h3>New behavior (explicit control required):</h3>
<ul>
<li>Hiding PayPal's <code>ACCELERATED_CHECKOUT</code> placement only hides PayPal.</li>
<li>To hide Venmo, you must now explicitly hide Venmo's placement separately. Venmo is only available in the <code>ACCELERATED_CHECKOUT</code> placement.</li>
</ul>
<p>To maintain the previous behavior of hiding both PayPal and Venmo together, update your payment customization function logic to explicitly target the Venmo payment method. Venmo can be targeted by checking for the exact string <code>&quot;Venmo&quot;</code> in the payment method's <code>name</code> field.</p>
<pre><code class="language-javascript">export function run(input) {
  const operations = [];

  const paypal = input.paymentMethods.find(method =&gt;
    method.name.includes(&quot;PayPal&quot;)
  );

  const venmo = input.paymentMethods.find(method =&gt;
    method.name === &quot;Venmo&quot;
  );

  if (shouldHidePayPal(input)) {
    if (paypal) {
      operations.push({
        paymentMethodHide: { paymentMethodId: paypal.id }
      });
    }

    // NEW: Must explicitly hide Venmo if you want both hidden
    if (venmo) {
      operations.push({
        paymentMethodHide: { paymentMethodId: venmo.id }
      });
    }
  }

  return { operations };
}
</code></pre>
</div> ]]></description>
    <pubDate>Mon, 15 Dec 2025 17:00:00 +0000</pubDate>
    <atom:published>2025-12-15T17:00:00.000Z</atom:published>
    <atom:updated>2025-12-15T17:00:00.000Z</atom:updated>
    <category>Action Required</category>
    <category>API</category>
    <category>Breaking API Change</category>
    <category>Functions</category>
    <category>2026-01</category>
    <link>https://shopify.dev/changelog/venmo-and-paypal-are-now-treated-as-separate-payment-methods</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/venmo-and-paypal-are-now-treated-as-separate-payment-methods</guid>
  </item>
  <item>
    <title>Faster bulk operations</title>
    <description><![CDATA[ <div class=""><p>We've updated bulk operations in the GraphQL Admin API to process large datasets faster.</p>
<p><strong>What's new:</strong>
Here's what we've done:</p>
<ul>
<li><strong>Support for all mutations</strong>: Previously bulk mutations only supported a limited set of actions. Now, you can execute any mutation using bulk operations across all API versions.</li>
<li><strong>Larger file uploads</strong> : Upload files up to 100MB (up from 20MB), reducing the number of operations needed for large datasets.</li>
<li><strong>Five concurrent operations</strong>: Each app can run up to five bulk operations per shop simultaneously. Split large imports and exports into parallel jobs and complete them faster without managing throttling or concurrency yourself.</li>
</ul>
<p>For setup guidance and examples, visit the <a href="https://shopify.dev/docs/api/usage/bulk-operations/imports" target="_blank" class="body-link">developer documentation</a>.</p>
</div> ]]></description>
    <pubDate>Mon, 15 Dec 2025 14:00:00 +0000</pubDate>
    <atom:published>2025-12-15T14:00:00.000Z</atom:published>
    <atom:updated>2025-12-15T18:01:58.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <category>Admin GraphQL API</category>
    <category>2026-01</category>
    <link>https://shopify.dev/changelog/faster-bulk-operations</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/faster-bulk-operations</guid>
  </item>
  <item>
    <title>Removal of payment method requirement on API created Subscription contracts</title>
    <description><![CDATA[ <div class=""><p>We've made it possible create subscription contracts without an attached payment method using the GraphQL Admin API. Contracts created through checkout will continue to require a payment method.</p>
<p>With this update, if you’re importing existing contracts with missing or expired payment methods, you can still migrate them to Shopify first and collect or update payment details later—removing a common onboarding blocker while keeping the buyer experience unchanged. </p>
<p><strong>Note</strong>: Charges can’t be processed until a valid payment method is added.</p>
<p><a href="https://shopify.dev/docs/apps/build/purchase-options/subscriptions/migrate-to-subscriptions-api/migrate-subscription-contracts" target="_blank" class="body-link">Learn more in the dev docs</a>.</p>
</div> ]]></description>
    <pubDate>Fri, 12 Dec 2025 17:00:00 +0000</pubDate>
    <atom:published>2025-12-12T17:00:00.000Z</atom:published>
    <atom:updated>2025-12-12T17:00:00.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <link>https://shopify.dev/changelog/removal-of-payment-method-requirement-on-api-created-subscription-contracts</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/removal-of-payment-method-requirement-on-api-created-subscription-contracts</guid>
  </item>
  <item>
    <title>Deprecation of `OrderTransaction.authorizationCode` in favor of `OrderTransaction.paymentId`</title>
    <description><![CDATA[ <div class=""><p>Starting with the <code>2026-01</code> API version, the <a href="https://shopify.dev/docs/api/admin-graphql/latest/objects/ordertransaction#field-OrderTransaction.fields.authorizationCode" target="_blank" class="body-link"><code>authorizationCode</code></a> field on the <a href="https://shopify.dev/docs/api/admin-graphql/latest/objects/ordertransaction#field-OrderTransaction" target="_blank" class="body-link"><code>OrderTransaction</code></a> object is deprecated. We recommend using the <a href="https://shopify.dev/docs/api/admin-graphql/latest/objects/ordertransaction#field-OrderTransaction.fields.paymentId" target="_blank" class="body-link"><code>paymentId</code></a> field instead.</p>
<p>The <code>paymentId</code> field provides a consistent, standardized identifier for payment reconciliation across all payment providers on Shopify. Adopting <code>paymentId</code> ensures your integration relies on the most stable and supported field for tracking and reconciling transactions, regardless of the underlying payment gateway.</p>
<p><strong>Warning:</strong> <code>paymentId</code> returns a Shopify-specific identifier, which differs from the provider-specific value in <code>authorizationCode</code>. Ensure your systems are updated to store and reconcile using this new ID format.</p>
<h3>Recommended migration</h3>
<p>Developers should update their queries to use the <code>paymentId</code> field when accessing <code>OrderTransaction</code> objects in the Admin GraphQL API. Replace instances of <code>authorizationCode</code> with <code>paymentId</code>. By making these changes, you ensure your app relies on the standard identifier for payment transactions.</p>
<p>For example, update your query from:</p>
<pre><code class="language-graphql">query TransactionDetails {
  order(id: &quot;gid://shopify/Order/12345&quot;) {
    transactions {
      id
      authorizationCode
    }
  }
}
</code></pre>
<p>to:</p>
<pre><code class="language-graphql">query TransactionDetails {
  order(id: &quot;gid://shopify/Order/12345&quot;) {
    transactions {
      id
      paymentId
    }
  }
}
</code></pre>
</div> ]]></description>
    <pubDate>Fri, 12 Dec 2025 17:00:00 +0000</pubDate>
    <atom:published>2025-12-12T17:00:00.000Z</atom:published>
    <atom:updated>2025-12-12T17:00:00.000Z</atom:updated>
    <category>API</category>
    <category>Deprecation announcement</category>
    <category>Admin GraphQL API</category>
    <link>https://shopify.dev/changelog/deprecation-of-ordertransaction-authorizationcode-in-favor-of-ordertransactionpaymentid</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/deprecation-of-ordertransaction-authorizationcode-in-favor-of-ordertransactionpaymentid</guid>
  </item>
  <item>
    <title>New compare and swap syntax for the `inventorySetQuantities` mutation</title>
    <description><![CDATA[ <div class=""><p>This changelog is relates to <a href="https://shopify.dev/changelog/concurrency-protection-features" target="_blank" class="body-link">concurrency protection features</a>.</p>
<p>We're making the <code>changeFromQuantity</code> field introduced <a href="https://shopify.dev/changelog/compare-and-swap-redesign-for-inventory-set-quantities" target="_blank" class="body-link">in <code>2026-01</code></a> mandatory and removing the <a href="https://shopify.dev/docs/api/admin-graphql/2026-01/input-objects/InventoryQuantityInput#fields-compareQuantity" target="_blank" class="body-link"><code>compareQuantity</code></a> and <a href="https://shopify.dev/docs/api/admin-graphql/2026-01/input-objects/InventorySetQuantitiesInput#fields-ignoreCompareQuantity" target="_blank" class="body-link"><code>ignoreCompareQuantity</code></a> fields for the <a href="https://shopify.dev/docs/api/admin-graphql/2026-04/mutations/inventorysetquantities" target="_blank" class="body-link"><code>inventorySetQuantities</code></a> mutation.</p>
<p>This is a breaking change. Note that even though the <code>changeFromQuantity</code> field doesn't show up as mandatory at the schema level, calling these mutations without passing in <code>null</code> or passing in the current actual quantity will result in an error at runtime.</p>
<h3>What you need to do</h3>
<p>Before migrating to version <code>2026-04</code>, update your application logic to include the <code>changeFromQuantity</code> argument:</p>
<ul>
<li>To enable concurrency checks (Recommended): Pass the expected current quantity.</li>
<li>To opt-out (skip checks): Explicitly pass <code>changeFromQuantity: null</code></li>
</ul>
<p>Additionally, before migrating, you must remove the <code>ignoreCompareQuantity</code> argument and the <code>compareQuantity</code> argument from your mutation calls.</p>
<h3>How to use the field</h3>
<p>Previously, to bypass comparison checks, you set <code>ignoreCompareQuantity</code> to <code>true</code>.</p>
<p>Now, to bypass comparison checks, you explicitly pass <code>null</code> to the <code>changeFromQuantity</code> field. To enable checks, pass an integer that represents the initial quantity before it is updated to the <a href="https://shopify.dev/docs/api/admin-graphql/2026-01/input-objects/InventoryQuantityInput#fields-quantity" target="_blank" class="body-link">desired value</a>.</p>
<p>In the following example, the operation will only successfully set the new available quantity to 12 if the current available quantity is 5. If another process has modified the quantity in the meantime, you'll receive an error and can retry with the updated value.</p>
<pre><code>  mutation {
    inventorySetQuantities(
      input: {
      quantities: [
        {
          quantity: 12,
          inventoryItemId: &quot;gid://shopify/InventoryItem/2&quot;,
          locationId: &quot;gid://shopify/Location/1&quot;,
          changeFromQuantity: 5
        }
      ],
      reason: &quot;correction&quot;,
      name: &quot;available&quot;
    }
    ) {
      inventoryAdjustmentGroup {
        id
      }
      userErrors {
        code
        message
      }
    }
  }
</code></pre>
<h3>Removing legacy fields</h3>
<p>The <code>compareQuantity</code> and <code>ignoreCompareQuantity</code> fields will be removed in version <code>2026-04</code>. </p>
<p>For more information on compare and swap, and when you should opt out of comparison checks, refer to <a href="https://shopify.dev/docs/apps/build/orders-fulfillment/inventory-management-apps/manage-quantities-states#compare-and-swap" target="_blank" class="body-link">our docs</a>. We encourage users to avoid opting-out unless it's justified by their use-case.</p>
</div> ]]></description>
    <pubDate>Fri, 12 Dec 2025 17:00:00 +0000</pubDate>
    <atom:published>2025-12-12T17:00:00.000Z</atom:published>
    <atom:updated>2025-12-12T17:00:00.000Z</atom:updated>
    <category>Action Required</category>
    <category>API</category>
    <category>Breaking API Change</category>
    <category>Admin GraphQL API</category>
    <category>2026-04</category>
    <link>https://shopify.dev/changelog/finalizing-compare-and-swap-redesign-for-inventory-set-quantities</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/finalizing-compare-and-swap-redesign-for-inventory-set-quantities</guid>
  </item>
  <item>
    <title>Concurrency protection features for inventory and refund mutations</title>
    <description><![CDATA[ <div class=""><p>This changelog consolidates all updates related to concurrency protection features for inventory and refund mutations.</p>
<h2>Compare and swap changes</h2>
<p>To prevent race conditions in inventory updates, we're introducing compare and swap protection through the <code>changeFromQuantity</code> field across multiple API versions:</p>
<ul>
<li><code>2026-01</code> : <a href="https://shopify.dev/changelog/compare-and-swap-for-inventory-mutations-with-change-from-quantity" target="_blank" class="body-link">Introducing a <code>changeFromQuantity</code> field for various inventory mutations</a> </li>
<li><code>2026-01</code>:  <a href="https://shopify.dev/changelog/compare-and-swap-redesign-for-inventory-set-quantities" target="_blank" class="body-link">Introducing a <code>changeFromQuantity</code> field for the <code>inventorySetQuantities</code> mutation and deprecating the old compare And swap fields</a></li>
<li><code>2026-04</code>: <a href="https://shopify.dev/changelog/making-changefromquantity-field-required" target="_blank" class="body-link">Making the <code>changeFromQuantity</code> field required (with explict opt-out) for various inventory mutations</a> <strong>(BREAKING)</strong> </li>
<li><code>2026-04</code>: <a href="https://shopify.dev/changelog/finalizing-compare-and-swap-redesign-for-inventory-set-quantities" target="_blank" class="body-link">Making the <code>changeFromQuantity</code> field required (with explict opt-out) for the <code>inventorySetQuantities</code> mutation and removing the old compare And swap fields</a> <strong>(BREAKING)</strong></li>
</ul>
<h2>Idempotency changes</h2>
<p>To prevent duplicate operations when requests are retried, we're introducing idempotency protection through the idempotent directive:</p>
<ul>
<li><code>2026-01</code>: <a href="https://shopify.dev/changelog/adding-idempotency-for-inventory-adjustments-and-refund-mutations" target="_blank" class="body-link">Introducing an optional <code>idempotent</code> directive for various inventory and refund mutations</a></li>
<li><code>2026-04</code> <a href="https://shopify.dev/changelog/making-idempotency-mandatory-for-inventory-adjustments-and-refund-mutations" target="_blank" class="body-link">Making the <code>idempotent</code> directive required for various inventory and refund mutations</a> <strong>(BREAKING)</strong></li>
</ul>
<h2>Why we made these changes</h2>
<p>Most inventory adjustments lack concurrency and idempotency protection, leaving systems vulnerable to race conditions, duplicate updates, and integrity issues—especially when commands are retried due to network disruptions. To solve this we will standardize concurrency and idempotency checks across Inventory APIs.</p>
<p>For more information, refer to our <a href="https://shopify.dev/docs/api/usage/idempotent-requests" target="_blank" class="body-link">idempotency</a> and <a href="https://shopify.dev/docs/apps/build/orders-fulfillment/inventory-management-apps/manage-quantities-states#compare-and-swap" target="_blank" class="body-link">compare and swap</a> docs.</p>
</div> ]]></description>
    <pubDate>Fri, 12 Dec 2025 17:00:00 +0000</pubDate>
    <atom:published>2025-12-12T17:00:00.000Z</atom:published>
    <atom:updated>2025-12-12T17:00:00.000Z</atom:updated>
    <category>Action Required</category>
    <category>API</category>
    <category>New</category>
    <category>Admin GraphQL API</category>
    <category>2026-01</category>
    <link>https://shopify.dev/changelog/concurrency-protection-features</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/concurrency-protection-features</guid>
  </item>
  <item>
    <title>Making `changeFromQuantity` field required (with explicit opt-out)</title>
    <description><![CDATA[ <div class=""><p>This changelog relates to <a href="https://shopify.dev/changelog/concurrency-protection-features" target="_blank" class="body-link">concurrency protection features</a>.</p>
<p>Starting in <code>2026-04</code>, the  <code>changeFromQuantity</code> field will be required for the following mutations:</p>
<ul>
<li><a href="https://shopify.dev/docs/api/admin-graphql/2026-01/mutations/inventoryAdjustQuantities" target="_blank" class="body-link"><code>inventoryAdjustQuantities</code></a>: Available on the <a href="https://shopify.dev/docs/api/admin-graphql/2026-01/input-objects/InventoryChangeInput" target="_blank" class="body-link"><code>InventoryChangeInput</code></a> input type</li>
<li><a href="https://shopify.dev/docs/api/admin-graphql/2026-01/mutations/inventoryMoveQuantities" target="_blank" class="body-link"><code>inventoryMoveQuantities</code></a>: Available on the <a href="https://shopify.dev/docs/api/admin-graphql/2026-01/input-objects/InventoryMoveQuantityTerminalInput" target="_blank" class="body-link"><code>InventoryMoveQuantityTerminalInput</code></a> input type</li>
<li><a href="https://shopify.dev/docs/api/admin-graphql/2026-01/mutations/inventorySetOnHandQuantities" target="_blank" class="body-link"><code>inventorySetOnHandQuantities</code></a>: Available on the <a href="https://shopify.dev/docs/api/admin-graphql/2026-01/input-objects/InventorySetQuantityInput" target="_blank" class="body-link"><code>InventorySetQuantityInput</code></a> input type</li>
<li><a href="https://shopify.dev/docs/api/admin-graphql/2026-01/mutations/productVariantsBulkUpdate" target="_blank" class="body-link">productVariantsBulkUpdate</a>: Available on the InventoryAdjustmentInput type, which is available on the <code>quantityAdjustments</code> field of the <a href="https://shopify.dev/docs/api/admin-graphql/2026-01/input-objects/ProductVariantsBulkInput" target="_blank" class="body-link"><code>ProductVariantsBulkInput</code></a> type</li>
</ul>
<p>This is a breaking change. Note that even though the <code>changeFromQuantity</code> field doesn't show up as mandatory at the schema level, calling these mutations without passing in <code>null</code> or passing in the current actual quantity will result in an error at runtime.</p>
<h2>What you need to do</h2>
<p>Before migrating to version 2026-04, update your application logic to include the <code>changeFromQuantity</code> argument:</p>
<ul>
<li>To enable concurrency checks (Recommended): Pass the expected current quantity.</li>
<li>To opt-out (skip checks): Explicitly pass <code>changeFromQuantity: null</code></li>
</ul>
<h2>How to use the field</h2>
<p>The <code>changeFromQuantity</code> field is useful to keep inventory data accurate, even if multiple updates are happening at the same time. If the actual quantity doesn't match the value you provide, the mutation will fail with a <code>CHANGE_FROM_QUANTITY_STALE</code> error, preventing unintended overwrites.</p>
<p>In the following example, the adjustment will only succeed if the current available quantity is 50. If another process has modified the quantity in the meantime, you'll receive an error and can retry with the updated value.</p>
<p>For more information on compare and swap, and when you should opt out of comparison checks, refer to <a href="https://shopify.dev/docs/apps/build/orders-fulfillment/inventory-management-apps/manage-quantities-states#compare-and-swap" target="_blank" class="body-link">our docs</a>. We encourage users to avoid opting-out unless it's justified by their use-case.
	</p>
<pre><code>  mutation {
    inventoryAdjustQuantities(
      input: {
        reason: &quot;correction&quot;
        name: &quot;available&quot;
        changes: [{
          delta: 10
          changeFromQuantity: 50
          inventoryItemId: &quot;gid://shopify/InventoryItem/123&quot;
          locationId: &quot;gid://shopify/Location/456&quot;
        }]
      }
    ) {
      inventoryAdjustmentGroup {
        id
      }
      userErrors {
        code
        message
      }
    }
  }
</code></pre>
</div> ]]></description>
    <pubDate>Fri, 12 Dec 2025 17:00:00 +0000</pubDate>
    <atom:published>2025-12-12T17:00:00.000Z</atom:published>
    <atom:updated>2025-12-12T17:00:00.000Z</atom:updated>
    <category>Action Required</category>
    <category>API</category>
    <category>Breaking API Change</category>
    <category>Admin GraphQL API</category>
    <category>2026-04</category>
    <link>https://shopify.dev/changelog/making-changefromquantity-field-required</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/making-changefromquantity-field-required</guid>
  </item>
  <item>
    <title>Making idempotency mandatory for inventory adjustments and refund mutations</title>
    <description><![CDATA[ <div class=""><p>This changelog relates to <a href="https://shopify.dev/changelog/concurrency-protection-features" target="_blank" class="body-link">concurrency protection features</a>.</p>
<p>We're making the <a href="https://shopify.dev/changelog/adding-idempotency-for-inventory-adjustments-and-refund-mutations" target="_blank" class="body-link">idempotent directive introduced here</a> <strong>mandatory</strong> for the following mutations in version <code>2026-04</code>:</p>
<ul>
<li><a href="https://shopify.dev/docs/api/admin-graphql/2026-01/mutations/refundCreate" target="_blank" class="body-link"><code>refundCreate</code></a></li>
<li><a href="https://shopify.dev/docs/api/admin-graphql/2026-01/mutations/inventoryShipmentReceive" target="_blank" class="body-link"><code>inventoryShipmentReceive</code></a></li>
<li><a href="https://shopify.dev/docs/api/admin-graphql/2026-01/mutations/inventoryAdjustQuantities" target="_blank" class="body-link"><code>inventoryAdjustQuantities</code></a></li>
<li><a href="https://shopify.dev/docs/api/admin-graphql/2026-01/mutations/inventoryMoveQuantities" target="_blank" class="body-link"><code>inventoryMoveQuantities</code></a></li>
<li><a href="https://shopify.dev/docs/api/admin-graphql/2026-01/mutations/inventorySetQuantities" target="_blank" class="body-link"><code>inventorySetQuantities</code></a></li>
<li><a href="https://shopify.dev/docs/api/admin-graphql/2026-01/mutations/inventorySetOnHandQuantities" target="_blank" class="body-link"><code>inventorySetOnHandQuantities</code></a></li>
<li><a href="https://shopify.dev/docs/api/admin-graphql/2026-01/mutations/inventoryShipmentCreateInTransit" target="_blank" class="body-link"><code>inventoryShipmentCreateInTransit</code></a></li>
<li><a href="https://shopify.dev/docs/api/admin-graphql/2026-01/mutations/inventoryShipmentCreate" target="_blank" class="body-link"><code>inventoryShipmentCreate</code></a></li>
<li><a href="https://shopify.dev/docs/api/admin-graphql/2026-01/mutations/inventoryTransferCreate" target="_blank" class="body-link"><code>inventoryTransferCreate</code></a></li>
<li><a href="https://shopify.dev/docs/api/admin-graphql/2026-01/mutations/inventoryTransferCreateAsReadyToShip" target="_blank" class="body-link"><code>inventoryTransferCreateAsReadyToShip</code></a></li>
<li><a href="https://shopify.dev/docs/api/admin-graphql/2026-01/mutations/inventoryTransferDuplicate" target="_blank" class="body-link"><code>inventoryTransferDuplicate</code></a></li>
<li><a href="https://shopify.dev/docs/api/admin-graphql/2026-01/mutations/inventoryTransferSetItems" target="_blank" class="body-link"><code>inventoryTransferSetItems</code></a></li>
<li><a href="https://shopify.dev/docs/api/admin-graphql/2026-01/mutations/inventorySetScheduledChanges" target="_blank" class="body-link"><code>inventorySetScheduledChanges</code></a></li>
<li><a href="https://shopify.dev/docs/api/admin-graphql/2026-01/mutations/inventoryActivate" target="_blank" class="body-link"><code>inventoryActivate</code></a></li>
<li><a href="https://shopify.dev/docs/api/admin-graphql/2026-01/mutations/inventoryShipmentAddItems" target="_blank" class="body-link"><code>inventoryShipmentAddItems</code></a></li>
<li><a href="https://shopify.dev/docs/api/admin-graphql/2026-01/mutations/locationActivate" target="_blank" class="body-link"><code>locationActivate</code></a></li>
<li><a href="https://shopify.dev/docs/api/admin-graphql/2026-01/mutations/locationDeactivate" target="_blank" class="body-link"><code>locationDeactivate</code></a></li>
</ul>
<blockquote>
<p><strong>Note</strong>:
Even though the idempotency directive doesn't show up as mandatory at the schema level, calling these mutations without an idempotency directive will result in an error at runtime.</p>
</blockquote>
<h2>What you need to do</h2>
<p>Developers using these mutations must update their application logic to include the <code>@idempotent</code> directive before migrating to version <code>2026-04</code></p>
<h2>How to use the directive</h2>
<p>An idempotency key is a unique identifier (we recommend using a UUID) that you provide when making a mutation request (generally, you would regenerate this key on page load and after successful operations). If you retry the same request with the same idempotency key due to network issues or timeouts, Shopify will recognize it as a duplicate and ensure the inventory is only adjusted once (or that the refund is only created once), protecting against double-counting. It will return the result of the original operation instead of creating a new one.</p>
<p>Example usage:</p>
<pre><code>  mutation {
    inventoryAdjustQuantities(
      input: {
        reason: &quot;restock&quot;
        name: &quot;available&quot;
        changes: [{
          delta: 5
          inventoryItemId: &quot;gid://shopify/InventoryItem/123&quot;
          locationId: &quot;gid://shopify/Location/456&quot;
        }]
      }
    ) @idempotent(key: &quot;4f5b6ebf-143c-4da5-8d0f-fb8553bfd85d&quot;) {
      inventoryAdjustmentGroup {
        id
      }
      userErrors {
        code
        message
      }
    }
  }
</code></pre>
<h2>Why we made this change</h2>
<p>Idempotency keys are essential for building robust, production-ready integrations. Duplicate inventory adjustments and duplicate refunds have long been a pain-point for merchants and for Shopify, resulting in inventory inconsistencies and financial losses. Making idempotency mandatory for our refund and inventory mutations will mitigate these problems.</p>
<p>For more information on how to implement idempotency, refer to <a href="https://shopify.dev/docs/api/usage/idempotent-requests" target="_blank" class="body-link">our docs</a>.</p>
<h2>Error codes</h2>
<p>If there's an issue with your idempotency key usage, you'll receive one of these error codes:</p>
<ul>
<li><code>IDEMPOTENCY_CONCURRENT_REQUEST</code>: Another request with the same idempotency key is currently being processed</li>
<li><code>IDEMPOTENCY_KEY_PARAMETER_MISMATCH</code>: The same idempotency key was used with different parameters</li>
</ul>
</div> ]]></description>
    <pubDate>Fri, 12 Dec 2025 17:00:00 +0000</pubDate>
    <atom:published>2025-12-12T17:00:00.000Z</atom:published>
    <atom:updated>2025-12-16T15:28:44.000Z</atom:updated>
    <category>Action Required</category>
    <category>API</category>
    <category>Breaking API Change</category>
    <category>Admin GraphQL API</category>
    <category>2026-04</category>
    <link>https://shopify.dev/changelog/making-idempotency-mandatory-for-inventory-adjustments-and-refund-mutations</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/making-idempotency-mandatory-for-inventory-adjustments-and-refund-mutations</guid>
  </item>
  <item>
    <title>Adding idempotency for inventory adjustments and refund mutations</title>
    <description><![CDATA[ <div class=""><p>This changelog relates to <a href="https://shopify.dev/changelog/concurrency-protection-features" target="_blank" class="body-link">concurrency protection features</a>.</p>
<p>We're introducing idempotency keys for several inventory and refund mutations. This enhancement helps you build more reliable integrations by preventing duplicate operations when retrying failed requests. You pass idempotency keys in using an <code>idempotent</code> directive. Refer to the <a href="https://shopify.dev/docs/api/usage/idempotent-requests" target="_blank" class="body-link">idempotent requests docs</a> for more details. </p>
<p>The following mutations now support the optional <code>idempotent</code> directive:</p>
<ul>
<li><a href="https://shopify.dev/docs/api/admin-graphql/2026-01/mutations/refundCreate" target="_blank" class="body-link"><code>refundCreate</code></a></li>
<li><a href="https://shopify.dev/docs/api/admin-graphql/2026-01/mutations/inventoryShipmentReceive" target="_blank" class="body-link"><code>inventoryShipmentReceive</code></a></li>
<li><a href="https://shopify.dev/docs/api/admin-graphql/2026-01/mutations/inventoryAdjustQuantities" target="_blank" class="body-link"><code>inventoryAdjustQuantities</code></a></li>
<li><a href="https://shopify.dev/docs/api/admin-graphql/2026-01/mutations/inventoryMoveQuantities" target="_blank" class="body-link"><code>inventoryMoveQuantities</code></a></li>
<li><a href="https://shopify.dev/docs/api/admin-graphql/2026-01/mutations/inventorySetQuantities" target="_blank" class="body-link"><code>inventorySetQuantities</code></a></li>
<li><a href="https://shopify.dev/docs/api/admin-graphql/2026-01/mutations/inventorySetOnHandQuantities" target="_blank" class="body-link"><code>inventorySetOnHandQuantities</code></a></li>
<li><a href="https://shopify.dev/docs/api/admin-graphql/2026-01/mutations/inventoryShipmentCreateInTransit" target="_blank" class="body-link"><code>inventoryShipmentCreateInTransit</code></a></li>
<li><a href="https://shopify.dev/docs/api/admin-graphql/2026-01/mutations/inventoryShipmentCreate" target="_blank" class="body-link"><code>inventoryShipmentCreate</code></a></li>
<li><a href="https://shopify.dev/docs/api/admin-graphql/2026-01/mutations/inventoryTransferCreate" target="_blank" class="body-link"><code>inventoryTransferCreate</code></a></li>
<li><a href="https://shopify.dev/docs/api/admin-graphql/2026-01/mutations/inventoryTransferCreateAsReadyToShip" target="_blank" class="body-link"><code>inventoryTransferCreateAsReadyToShip</code></a></li>
<li><a href="https://shopify.dev/docs/api/admin-graphql/2026-01/mutations/inventoryTransferDuplicate" target="_blank" class="body-link"><code>inventoryTransferDuplicate</code></a></li>
<li><a href="https://shopify.dev/docs/api/admin-graphql/2026-01/mutations/inventoryTransferSetItems" target="_blank" class="body-link"><code>inventoryTransferSetItems</code></a></li>
<li><a href="https://shopify.dev/docs/api/admin-graphql/2026-01/mutations/inventorySetScheduledChanges" target="_blank" class="body-link"><code>inventorySetScheduledChanges</code></a></li>
<li><a href="https://shopify.dev/docs/api/admin-graphql/2026-01/mutations/inventoryActivate" target="_blank" class="body-link"><code>inventoryActivate</code></a></li>
<li><a href="https://shopify.dev/docs/api/admin-graphql/2026-01/mutations/inventoryShipmentAddItems" target="_blank" class="body-link"><code>inventoryShipmentAddItems</code></a></li>
<li><a href="https://shopify.dev/docs/api/admin-graphql/2026-01/mutations/locationActivate" target="_blank" class="body-link"><code>locationActivate</code></a></li>
<li><a href="https://shopify.dev/docs/api/admin-graphql/2026-01/mutations/locationDeactivate" target="_blank" class="body-link"><code>locationDeactivate</code></a></li>
</ul>
<blockquote>
<p><strong>Note</strong>:
While the <code>idempotent</code> directive is optional for now, we plan to make it mandatory for these mutations in version <code>2026-04</code>.</p>
</blockquote>
<h2>How to use the directive</h2>
<p>An idempotency key is a unique identifier (we recommend using a UUID) that you provide when making a mutation request (generally, you would regenerate this key on page load and after successful operations). If you retry the same request with the same idempotency key due to network issues or timeouts, Shopify will recognize it as a duplicate and ensure the inventory is only adjusted once (or that the refund is only created once), protecting against double-counting. It will return the result of the original operation instead of creating a new one.</p>
<p>Example usage:</p>
<pre><code>  mutation {
    inventoryAdjustQuantities(
      input: {
        reason: &quot;restock&quot;
        name: &quot;available&quot;
        changes: [{
          delta: 5
          inventoryItemId: &quot;gid://shopify/InventoryItem/123&quot;
          locationId: &quot;gid://shopify/Location/456&quot;
        }]
      }
    ) @idempotent(key: &quot;4f5b6ebf-143c-4da5-8d0f-fb8553bfd85d&quot;) {
      inventoryAdjustmentGroup {
        id
      }
      userErrors {
        code
        message
      }
    }
  }
</code></pre>
<h2>Why we made this change</h2>
<p>Idempotency keys are essential for building robust, production-ready integrations. Network failures and timeouts are inevitable, and without idempotency protection, retrying requests could lead to duplicate refunds, incorrect inventory counts, or other data inconsistencies. Making this feature publicly available gives you the tools to handle these scenarios safely.</p>
<h2>Error codes</h2>
<p>If there's an issue with your idempotency key usage, you'll receive one of these error codes:</p>
<ul>
<li><code>IDEMPOTENCY_CONCURRENT_REQUEST</code>: Another request with the same idempotency key is currently being processed.</li>
<li><code>IDEMPOTENCY_KEY_PARAMETER_MISMATCH</code>: The same idempotency key was used with different parameters.</li>
</ul>
</div> ]]></description>
    <pubDate>Fri, 12 Dec 2025 17:00:00 +0000</pubDate>
    <atom:published>2025-12-12T17:00:00.000Z</atom:published>
    <atom:updated>2025-12-16T15:29:00.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <category>Admin GraphQL API</category>
    <category>2026-01</category>
    <link>https://shopify.dev/changelog/adding-idempotency-for-inventory-adjustments-and-refund-mutations</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/adding-idempotency-for-inventory-adjustments-and-refund-mutations</guid>
  </item>
  <item>
    <title>New `changeFromQuantity` field to manage inventory</title>
    <description><![CDATA[ <div class=""><p>This changelog relates to <a href="https://shopify.dev/changelog/concurrency-protection-features" target="_blank" class="body-link">concurrency protection features</a>.</p>
<p>The following mutations now support the optional <code>changeFromQuantity</code> field:</p>
<ul>
<li><a href="https://shopify.dev/docs/api/admin-graphql/2026-01/mutations/inventoryAdjustQuantities" target="_blank" class="body-link"><code>inventoryAdjustQuantities</code></a>: Available on the <a href="https://shopify.dev/docs/api/admin-graphql/2026-01/input-objects/InventoryChangeInput" target="_blank" class="body-link"><code>InventoryChangeInput</code></a> input type</li>
<li><a href="https://shopify.dev/docs/api/admin-graphql/2026-01/mutations/inventoryMoveQuantities" target="_blank" class="body-link"><code>inventoryMoveQuantities</code></a>: Available on the <a href="https://shopify.dev/docs/api/admin-graphql/2026-01/input-objects/InventoryMoveQuantityTerminalInput" target="_blank" class="body-link"><code>InventoryMoveQuantityTerminalInput</code></a> input type</li>
<li><a href="https://shopify.dev/docs/api/admin-graphql/2026-01/mutations/inventorySetOnHandQuantities" target="_blank" class="body-link"><code>inventorySetOnHandQuantities</code></a>: Available on the <a href="https://shopify.dev/docs/api/admin-graphql/2026-01/input-objects/InventorySetQuantityInput" target="_blank" class="body-link"><code>InventorySetQuantityInput</code></a> input type</li>
<li><a href="https://shopify.dev/docs/api/admin-graphql/2026-01/mutations/productVariantsBulkUpdate" target="_blank" class="body-link"><code>productVariantsBulkUpdate</code></a>: Available on the InventoryAdjustmentInput type, which is available on the <code>quantityAdjustments</code> field of the <a href="https://shopify.dev/docs/api/admin-graphql/2026-01/input-objects/ProductVariantsBulkInput" target="_blank" class="body-link"><code>ProductVariantsBulkInput</code></a> type</li>
</ul>
<blockquote>
<p><strong>Note</strong>: 
The  <code>quantityAdjustments</code> field of the <code>productVariantsBulkUpdate</code> mutation will only be public in version <code>2026-01</code>.</p>
</blockquote>
<h2>How to use the field</h2>
<p>The <code>changeFromQuantity</code> field is useful to keep inventory data accurate, even if multiple updates are happening at the same time. If the actual quantity doesn't match the value you provide, the mutation will fail with a <code>CHANGE_FROM_QUANTITY_STALE</code> error, preventing unintended overwrites.</p>
<p>In the following example, the adjustment only succeeds if the current available quantity is 50. If another process has modified the quantity in the meantime, you'll receive an error and can retry with the updated value. To opt-out of comparison checks you can explicitly pass in <code>null</code> to the <code>changeFromQuantity</code> field. 
	</p>
<pre><code>  mutation {
    inventoryAdjustQuantities(
      input: {
        reason: &quot;correction&quot;
        name: &quot;available&quot;
        changes: [{
          delta: 10
          changeFromQuantity: 50
          inventoryItemId: &quot;gid://shopify/InventoryItem/123&quot;
          locationId: &quot;gid://shopify/Location/456&quot;
        }]
      }
    ) {
      inventoryAdjustmentGroup {
        id
      }
      userErrors {
        code
        message
      }
    }
  }
</code></pre>
<p>For more information on compare and swap, and when you should opt out of comparison checks, refer to <a href="https://shopify.dev/docs/apps/build/orders-fulfillment/inventory-management-apps/manage-quantities-states#compare-and-swap" target="_blank" class="body-link">our docs</a>. We encourage users to avoid opting-out unless it's justified by their use case.</p>
</div> ]]></description>
    <pubDate>Fri, 12 Dec 2025 17:00:00 +0000</pubDate>
    <atom:published>2025-12-12T17:00:00.000Z</atom:published>
    <atom:updated>2025-12-12T17:00:00.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <category>Admin GraphQL API</category>
    <category>2026-01</category>
    <link>https://shopify.dev/changelog/compare-and-swap-for-inventory-mutations-with-change-from-quantity</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/compare-and-swap-for-inventory-mutations-with-change-from-quantity</guid>
  </item>
  <item>
    <title>Improved compare and swap inventory updates for the `inventorySetQuantities` mutation</title>
    <description><![CDATA[ <div class=""><p>This changelog relates to <a href="https://shopify.dev/changelog/concurrency-protection-features" target="_blank" class="body-link">concurrency protection features</a>.</p>
<p>We've enhanced the compare-and-swap functionality in the <a href="https://shopify.dev/docs/api/admin-graphql/2026-01/mutations/inventorysetquantities" target="_blank" class="body-link"><code>inventorySetQuantities</code> mutation</a> to make concurrent inventory updates more intuitive. You can now use the new <code>changeFromQuantity</code> field in <a href="https://shopify.dev/docs/api/admin-graphql/2026-01/input-objects/InventoryQuantityInput" target="_blank" class="body-link">InventoryQuantityInput</a> to explicitly choose whether to perform quantity comparison checks.</p>
<p>The use of <a href="https://shopify.dev/docs/api/admin-graphql/2026-01/input-objects/InventoryQuantityInput#fields-compareQuantity" target="_blank" class="body-link"><code>compareQuantity</code></a> and <a href="https://shopify.dev/docs/api/admin-graphql/2026-01/input-objects/InventorySetQuantitiesInput#fields-ignoreCompareQuantity" target="_blank" class="body-link"><code>ignoreCompareQuantity</code></a> will be deprecated .</p>
<p>This <code>2026-01</code> change isn't considered breaking because if users don't pass in a value for <code>changeFromQuantity</code>, the mutation will fallback to using the values for <code>compareQuantity</code> and <code>ignoreCompareQuantity</code>.</p>
<h3>How to use the field</h3>
<p>Previously, to bypass comparison checks, you set <code>ignoreCompareQuantity</code> to <code>true</code>.</p>
<p>Now, to bypass comparison checks, you explicitly pass <code>null</code> to the <code>changeFromQuantity</code> field. To enable checks, pass an integer that represents the initial quantity before it is updated to the <a href="https://shopify.dev/docs/api/admin-graphql/2026-01/input-objects/InventoryQuantityInput#fields-quantity" target="_blank" class="body-link">desired value</a>.</p>
<p>Passing any value (including <code>null</code>) to <code>changeFromQuantity</code> will override any values passed to the <code>compareQuantity</code> and <code>ignoreCompareQuantity</code> fields. In the following example, the operation will only successfully set the new available quantity to 12 if the current available quantity is 5. If another process has modified the quantity in the meantime, you'll receive an error and can retry with the updated value.</p>
<pre><code>  mutation {
    inventorySetQuantities(
      input: {
      quantities: [
        {
          quantity: 12,
          inventoryItemId: &quot;gid://shopify/InventoryItem/2&quot;,
          locationId: &quot;gid://shopify/Location/1&quot;,
          changeFromQuantity: 5
        }
      ],
      reason: &quot;correction&quot;,
      name: &quot;available&quot;
    }
    ) {
      inventoryAdjustmentGroup {
        id
      }
      userErrors {
        code
        message
      }
    }
  }
</code></pre>
<h3>Deprecating legacy fields</h3>
<p>The <code>compareQuantity</code> and <code>ignoreCompareQuantity</code> fields will be deprecated in version <code>2026-01</code>. We plan to remove them entirely starting from version <code>2026-04</code>.</p>
<p>For more information on compare and swap, and when you should opt out of comparison checks, refer to <a href="https://shopify.dev/docs/apps/build/orders-fulfillment/inventory-management-apps/manage-quantities-states#compare-and-swap" target="_blank" class="body-link">our docs</a>. We encourage users to avoid opting-out unless it's justified by their use-case.</p>
</div> ]]></description>
    <pubDate>Fri, 12 Dec 2025 17:00:00 +0000</pubDate>
    <atom:published>2025-12-12T17:00:00.000Z</atom:published>
    <atom:updated>2025-12-12T17:00:00.000Z</atom:updated>
    <category>API</category>
    <category>Deprecation announcement</category>
    <category>Admin GraphQL API</category>
    <category>2026-01</category>
    <link>https://shopify.dev/changelog/compare-and-swap-redesign-for-inventory-set-quantities</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/compare-and-swap-redesign-for-inventory-set-quantities</guid>
  </item>
  <item>
    <title>The Winter '26 Edition is here</title>
    <description><![CDATA[ <div class=""><p>Announcing 150+ updates to Shopify.</p>
<p><a href="https://www.shopify.com/editions/winter2026?utm_source=changelog-dev&utm_medium=changelog-dev&utm_campaign=winter26edition-launch_Q425BACADO" target="_blank" class="body-link">See the updates</a></p>
</div> ]]></description>
    <pubDate>Wed, 10 Dec 2025 15:00:00 +0000</pubDate>
    <atom:published>2025-12-10T15:00:00.000Z</atom:published>
    <atom:updated>2025-12-10T15:00:00.000Z</atom:updated>
    <category>Platform</category>
    <category>New</category>
    <link>https://shopify.dev/changelog/the-winter-26-edition-is-here</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/the-winter-26-edition-is-here</guid>
  </item>
  <item>
    <title>New fields to combine bundle options</title>
    <description><![CDATA[ <div class=""><p>In the API <code>2026-01</code> release candidate version, we've introduced consolidated options in the GraphQL Admin API. This feature allows you to support merchants by combining options, such as size and length, to streamline the checkout process for customers.</p>
<p>The new <code>consolidatedOptions</code> field has been added to the <a href="https://shopify.dev/docs/api/admin-graphql/latest/input-objects/ProductBundleCreateInput" target="_blank" class="body-link"><code>ProductBundleCreateInput</code></a> and <a href="https://shopify.dev/docs/api/admin-graphql/latest/input-objects/productbundleupdateinput" target="_blank" class="body-link"><code>ProductBundleUpdateInput</code></a> input objects in the GraphQL Admin API. Use this field to define which buyer-facing options to combine across components, ensuring a single selector for customers purchasing fixed bundles.</p>
<p>Learn more about combining bundle options by following this <a href="https://shopify.dev/docs/apps/build/product-merchandising/bundles/add-product-fixed-bundle" target="_blank" class="body-link">tutorial</a>.</p>
</div> ]]></description>
    <pubDate>Wed, 10 Dec 2025 14:30:00 +0000</pubDate>
    <atom:published>2025-12-10T14:30:00.000Z</atom:published>
    <atom:updated>2025-12-10T14:30:00.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <category>Admin GraphQL API</category>
    <category>2026-01</category>
    <link>https://shopify.dev/changelog/new-fields-to-combine-bundle-options</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/new-fields-to-combine-bundle-options</guid>
  </item>
  <item>
    <title>ShopifyQL Python SDK and CLI now available for analytics</title>
    <description><![CDATA[ <div class=""><p>Developers and merchants can now access ShopifyQL data through a dedicated Python SDK and CLI tool designed for analytics workflows.</p>
<p>The ShopifyQL Python package provides a clean, Pythonic interface for ShopifyQL queries while handling GraphQL API complexity behind the scenes. It eliminates manual OAuth implementation and HTTP request handling, returning data directly as either pandas DataFrames or polars DataFrames.This enables you to create reporting apps and export data to data warehouses without managing GraphQL interactions directly.</p>
<p><a href="https://shopify.dev/docs/apps/build/shopifyql/python-sdk-and-cli" target="_blank" class="body-link">Learn more</a>.</p>
</div> ]]></description>
    <pubDate>Wed, 10 Dec 2025 14:30:00 +0000</pubDate>
    <atom:published>2025-12-10T14:30:00.000Z</atom:published>
    <atom:updated>2025-12-10T14:30:00.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <link>https://shopify.dev/changelog/shopifyql-python-sdk-and-cli-now-available-for-analytics</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/shopifyql-python-sdk-and-cli-now-available-for-analytics</guid>
  </item>
  <item>
    <title>Monitor admin performance issues by region with Web Vitals API</title>
    <description><![CDATA[ <div class=""><p>Enhance your app's global admin performance with regional data from the Web Vitals API. Each Web Vitals event now includes a country field with a two-letter ISO country code, allowing you to pinpoint where users encounter performance issues with your app.</p>
<p>This update enables you to understand regional performance patterns and optimize your app for users worldwide. You can segment admin performance data by geography to identify slow-loading regions, troubleshoot location-specific issues, and ensure consistent user experiences across various markets.</p>
<p>No additional setup is required; existing onReport callbacks automatically receive the new country field. Use this data to create more targeted performance optimizations and deliver faster admin experiences for merchants globally.</p>
<p>For more information about the Web Vitals API, visit the <a href="https://shopify.dev/docs/apps/build/performance/admin-installation-oauth?utm_source=w26-editions-website&utm_medium=product-cta&utm_campaign=winter26edition#measure-your-apps-loading-performance" target="_blank" class="body-link">developer documentation</a>.</p>
</div> ]]></description>
    <pubDate>Wed, 10 Dec 2025 14:30:00 +0000</pubDate>
    <atom:published>2025-12-10T14:30:00.000Z</atom:published>
    <atom:updated>2025-12-10T14:30:00.000Z</atom:updated>
    <category>API</category>
    <category>Update</category>
    <link>https://shopify.dev/changelog/monitor-admin-performance-issues-by-region-with-web-vitals-api</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/monitor-admin-performance-issues-by-region-with-web-vitals-api</guid>
  </item>
  <item>
    <title>Introducing Sidekick app extensions</title>
    <description><![CDATA[ <div class=""><p>Today, we're introducing <a href="https://shopify.dev/docs/apps/build/sidekick" target="_blank" class="body-link">Sidekick app extensions</a> to give your app new ways to integrate your app with <a href="https://www.shopify.com/magic" target="_blank" class="body-link">Sidekick</a>, Shopify's AI-enabled commerce assistant. </p>
<h3>What are Sidekick app extensions?</h3>
<p>Your app can connect its data and workflows using app extensions. Sidekick can search your app’s data, answer questions with your app’s context, and take merchants straight to the right page in your app.</p>
<p>You can also let Sidekick assist directly inside your app. Define safe, scoped actions—like editing an email template, creating a product review, or updating a support issue—and Sidekick will suggest changes and bring up the right UI, but merchants stay in control of what gets updated.</p>
<h3>Learn more</h3>
<p>Jump in and take a tour through our <a href="https://shopify.dev/docs/apps/build/sidekick" target="_blank" class="body-link">documentation on Sidekick app extensions</a> to learn how you can integrate these new super-powers into your app!</p>
<h3>Holler at us</h3>
<p>Leave us feedback, comments, and questions in the <a href="https://community.shopify.dev/c/extensions/5" target="_blank" class="body-link">Shopify Developer Community</a>. We'd love to hear from you. </p>
</div> ]]></description>
    <pubDate>Wed, 10 Dec 2025 14:30:00 +0000</pubDate>
    <atom:published>2025-12-10T14:30:00.000Z</atom:published>
    <atom:updated>2025-12-10T14:30:00.000Z</atom:updated>
    <category>Platform</category>
    <category>New</category>
    <link>https://shopify.dev/changelog/introducing-sidekick-app-extensions</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/introducing-sidekick-app-extensions</guid>
  </item>
  <item>
    <title>Simplified App Store requirements</title>
    <description><![CDATA[ <div class=""><p>Preparing your app for review just became more straightforward. We've simplified and updated App Store requirements to be clearer, better organized, and easier to work with throughout the development process.</p>
<p><strong>What's improved:</strong></p>
<ul>
<li><strong>Streamlined structure:</strong> Requirements are organized for better structure and readability, so you can understand exactly what’s needed.</li>
<li><strong>Numbered for easy reference:</strong> Each requirement has a clear number and hyperlink associated with it, making it simple to reference specific items as you work through them.</li>
</ul>
<p><strong>What this means for you:</strong>
These improvements remove friction from understanding and following requirements, so you can focus on building features that merchants love.</p>
<p>All updated requirements are now live in the <a href="https://shopify.dev/docs/apps/launch/shopify-app-store/app-store-requirements" target="_blank" class="body-link">developer documentation</a>.</p>
</div> ]]></description>
    <pubDate>Wed, 10 Dec 2025 14:30:00 +0000</pubDate>
    <atom:published>2025-12-10T14:30:00.000Z</atom:published>
    <atom:updated>2025-12-10T14:30:00.000Z</atom:updated>
    <category>App store</category>
    <category>Update</category>
    <link>https://shopify.dev/changelog/simplified-app-store-requirements</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/simplified-app-store-requirements</guid>
  </item>
  <item>
    <title>Multi-environment theme commands in Shopify CLI</title>
    <description><![CDATA[ <div class=""><p>You can now run theme commands across multiple environments simultaneously, making it easier to manage themes across development, staging, and production stores in a single operation.</p>
</div> ]]></description>
    <pubDate>Wed, 10 Dec 2025 14:30:00 +0000</pubDate>
    <atom:published>2025-12-10T14:30:00.000Z</atom:published>
    <atom:updated>2025-12-10T14:30:00.000Z</atom:updated>
    <category>Tools</category>
    <category>New</category>
    <link>https://shopify.dev/changelog/multi-environment-theme-commands-shopify-cli</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/multi-environment-theme-commands-shopify-cli</guid>
  </item>
  <item>
    <title>A more powerful Dev Assistant on shopify.dev</title>
    <description><![CDATA[ <div class=""><p>We've overhauled the Dev Assistant to make it a more reliable and comprehensive companion for your development workflow. While the Assistant is already a familiar tool, this update introduces a new engine designed to deliver higher accuracy and broader knowledge across the entire ecosystem.</p>
<p>Key improvements include:</p>
<ul>
<li><strong>Comprehensive platform knowledge</strong>: The Assistant now supports the full breadth of the Shopify development platform. Whether you're working with the GraphQL Admin API, building UI extensions, or configuring Hydrogen, you can ask about any aspect of the platform and get a relevant answer.</li>
<li><strong>Verified code examples</strong>: We've improved the accuracy of generated solutions. The Assistant now validates code blocks against our schemas before rendering the response, ensuring the snippets you receive are syntactically correct and ready to use.</li>
<li><strong>Direct documentation access</strong>: It's now easier to verify answers and dive deeper into specific topics. The Assistant provides transparent resource links alongside every response, enabling you to navigate quickly to the exact pages on shopify.dev that were used to generate the answer.</li>
</ul>
</div> ]]></description>
    <pubDate>Wed, 10 Dec 2025 14:30:00 +0000</pubDate>
    <atom:published>2025-12-10T14:30:00.000Z</atom:published>
    <atom:updated>2025-12-10T14:30:00.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <link>https://shopify.dev/changelog/a-more-powerful-dev-assistant-on-shopifydev</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/a-more-powerful-dev-assistant-on-shopifydev</guid>
  </item>
  <item>
    <title>Revamped POS UI extensions reference</title>
    <description><![CDATA[ <div class=""><p>We've overhauled the Point of Sale (POS) UI extensions reference, making it easier for you to build extensions that integrate into Shopify's <a href="https://shopify.dev/docs/apps/build/pos" target="_blank" class="body-link">Point of Sale interface</a>.</p>
<p>Updates include:</p>
<ul>
<li><strong>Expanded guidance:</strong> Detailed explanations and real-world use cases help you implement features.</li>
<li><strong>More examples:</strong> New code snippets and an example switcher help you find what you need faster.</li>
<li><strong>Clearer relationships:</strong> Support matrices show at a glance how targets, APIs, and components work together.</li>
<li><strong>Developer feedback addressed:</strong> We reviewed and resolved 100% of feedback submitted through our <strong>Was this doc helpful?</strong> form.</li>
</ul>
<p>Check out the new <a href="https://shopify.dev/docs/api/pos-ui-extensions" target="_blank" class="body-link">POS UI extensions reference</a>.</p>
</div> ]]></description>
    <pubDate>Wed, 10 Dec 2025 14:30:00 +0000</pubDate>
    <atom:published>2025-12-10T14:30:00.000Z</atom:published>
    <atom:updated>2025-12-10T14:30:00.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <category>POS Extensions</category>
    <link>https://shopify.dev/changelog/revamped-pos-ui-extensions-reference</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/revamped-pos-ui-extensions-reference</guid>
  </item>
  <item>
    <title>Binary testing for Shopify Functions</title>
    <description><![CDATA[ <div class=""><p>We've released the <a href="https://www.npmjs.com/package/@shopify/shopify-function-test-helpers" target="_blank" class="body-link"><code>@shopify/shopify-function-test-helpers</code></a> package to simplify writing comprehensive integration tests for Shopify Functions using real production data. All function extension templates now include integration tests powered by this package.</p>
<h2>Why this matters</h2>
<ol>
<li><strong>Test the actual WASM binary</strong>: Integration tests validate the compiled code uploaded to Shopify's infrastructure, helping to catch breaking changes before they hit production; including compilation errors, runtime crashes, or serialization issues that unit tests might miss.</li>
<li><strong>Easily add new scenarios</strong>: Create new fixtures in the <code>tests/fixtures/</code> directory, and the test suite will automatically include them. There's no need to write additional test code for each new scenario.</li>
<li><strong>Build from real production data</strong>: Create your fixture library by copying function run logs directly from production. This enables you to test against the actual inputs your function encounters, ensuring your tests reflect real-world scenarios.</li>
</ol>
<h2>Learn more</h2>
<p>For more details, visit the <a href="https://www.npmjs.com/package/@shopify/shopify-function-test-helpers" target="_blank" class="body-link">package page</a> or explore the <a href="https://shopify.dev/docs/apps/build/functions/test-debug-functions#writing-wasm-integration-tests-for-functions" target="_blank" class="body-link">Shopify developer documentation</a>.</p>
</div> ]]></description>
    <pubDate>Wed, 10 Dec 2025 14:30:00 +0000</pubDate>
    <atom:published>2025-12-10T14:30:00.000Z</atom:published>
    <atom:updated>2025-12-10T14:30:00.000Z</atom:updated>
    <category>Tools</category>
    <category>New</category>
    <category>Functions</category>
    <link>https://shopify.dev/changelog/binary-testing-for-shopify-functions</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/binary-testing-for-shopify-functions</guid>
  </item>
  <item>
    <title>Offline access tokens now support expiry and refresh</title>
    <description><![CDATA[ <div class=""><p><a href="https://shopify.dev/docs/apps/build/authentication-authorization/access-tokens/offline-access-tokens" target="_blank" class="body-link">Offline access tokens</a> now can optionally expire after 60 minutes and come with a refresh token. You can use the refresh token to obtain a new offline access token without requiring merchant interaction. This update aligns our process with the OAuth 2.0 specification and enhances security.</p>
<h2>How expiry works</h2>
<p>OAuth authorizes your app to act on behalf of a store. Once the merchant approves your requested scopes, you receive tokens.</p>
<ol>
<li>Direct the merchant through OAuth and request offline access.</li>
<li>We provide:<ul>
<li><code>access_token</code> access token to be used to make API requests</li>
<li><code>expires_in</code> time to live (TTL) of the access token in seconds (3600 seconds)</li>
<li><code>refresh_token</code> used to request a new access token with an updated TTL</li>
</ul>
</li>
<li>Before or after the access token expires, exchange the <code>refresh_token</code> at the token endpoint to receive a new offline access token.</li>
<li>Update stored tokens with the latest values returned by the refresh response.</li>
</ol>
<p>Refer to the OAuth documentation for specific parameters, error codes, and retry guidance.</p>
<h2>How to implement expiry</h2>
<ul>
<li>Securely store refresh tokens, as they are sensitive credentials that can generate new access tokens. Use a secrets manager, encrypt at rest, and restrict access.</li>
<li>To implement expiring tokens, you'll need to:<ul>
<li>Track the access token’s 60-minute expiry.</li>
<li>Proactively refresh tokens a few minutes before they expire, and when you recieve a 401 response.</li>
<li>Update stored tokens with the latest values from the refresh response.</li>
<li>Remove any assumptions in your code that offline tokens never expire.</li>
</ul>
</li>
<li>Monitor logs and alerts for token refresh failures, and revert to a new OAuth authorization if necessary.</li>
</ul>
<h2>Migration and compatibility</h2>
<ul>
<li>This change is additive: existing perpetual offline tokens will continue to function for now.</li>
<li>Available with both <a href="https://shopify.dev/docs/apps/build/authentication-authorization/access-tokens/token-exchange" target="_blank" class="body-link">token exchange</a> and <a href="https://shopify.dev/docs/apps/build/authentication-authorization/access-tokens/authorization-code-grant" target="_blank" class="body-link">authorization code</a> grant types.  The <a href="https://shopify.dev/docs/apps/build/authentication-authorization/access-tokens/client-credentials-grant" target="_blank" class="body-link">client credentials grant</a> already supports expiry and refresh using a slightly different OAuth 2 spec process.</li>
</ul>
</div> ]]></description>
    <pubDate>Wed, 10 Dec 2025 14:30:00 +0000</pubDate>
    <atom:published>2025-12-10T14:30:00.000Z</atom:published>
    <atom:updated>2025-12-10T14:30:00.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <category>Admin GraphQL API</category>
    <category>Admin REST API</category>
    <link>https://shopify.dev/changelog/offline-access-tokens-now-support-expiry-and-refresh</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/offline-access-tokens-now-support-expiry-and-refresh</guid>
  </item>
  <item>
    <title>Advanced Metafield &amp; Metaobject Querying</title>
    <description><![CDATA[ <div class=""><p>We've expanded the resources that you can query by metafield value to include Companies and Company Locations. We've also expanded how you can query metafield values on Products, Orders, and Metaobject entries to include:</p>
<ul>
<li>Greater than and less than comparisons</li>
<li>Prefix matching</li>
<li>Boolean operators (AND, OR, NOT)</li>
</ul>
<p>These work across more metafield types than before. No more fetching all resources and iterating through metafield values client-side. You can filter directly in your queries, and the query options now match how other properties are searchable on resources.</p>
</div> ]]></description>
    <pubDate>Wed, 10 Dec 2025 14:30:00 +0000</pubDate>
    <atom:published>2025-12-10T14:30:00.000Z</atom:published>
    <atom:updated>2025-12-10T14:30:00.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <category>Admin GraphQL API</category>
    <category>2026-01</category>
    <link>https://shopify.dev/changelog/advanced-metafield-metaobject-querying</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/advanced-metafield-metaobject-querying</guid>
  </item>
  <item>
    <title>New: Open source experimentation platform</title>
    <description><![CDATA[ <div class=""><p>Tangle is a platform-agnostic, open source experimentation platform with a visual editor and content-based caching.  </p>
<p>With Tangle, you can build ML and data pipelines collaboratively, choosing from reusable modules in the component library or adding your own.</p>
<p><a href="https://tangleml.com/" target="_blank" class="body-link">Learn more about Tangle</a>.</p>
</div> ]]></description>
    <pubDate>Mon, 08 Dec 2025 13:03:00 +0000</pubDate>
    <atom:published>2025-12-08T13:03:00.000Z</atom:published>
    <atom:updated>2025-12-09T21:57:58.000Z</atom:updated>
    <category>Tools</category>
    <category>New</category>
    <link>https://shopify.dev/changelog/new-open-source-experimentation-platform</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/new-open-source-experimentation-platform</guid>
  </item>
  <item>
    <title>Order editing new validations and handled `userErrors`</title>
    <description><![CDATA[ <div class=""><p>Order editing mutations now include additional validations. When these validations fail, the API returns relevant <code>userErrors</code> in the response. These changes apply to all supported API versions.</p>
<h2>Gift card amount limit</h2>
<p>Gift cards added with the <a href="https://shopify.dev/docs/api/admin-graphql/latest/mutations/ordereditaddvariant" target="_blank" class="body-link"><code>orderEditAddVariant</code></a> mutation are now subject to a maximum value limit. Limits vary by currency but are set high enough to accommodate typical merchant use cases.</p>
<h3>Error message</h3>
<p><code>Gift card amount exceeds the limit of {limit}</code></p>
<h2>Line item count limit</h2>
<p>Orders are limited to a maximum number of active line items when using the <a href="https://shopify.dev/docs/api/admin-graphql/latest/mutations/ordereditaddvariant" target="_blank" class="body-link"><code>orderEditAddVariant</code></a> and <a href="https://shopify.dev/docs/api/admin-graphql/latest/mutations/ordereditaddcustomitem" target="_blank" class="body-link"><code>orderEditAddCustomItem</code></a> mutations.</p>
<h3>Error message</h3>
<p><code>The number of line items exceeds the limit of {limit}</code></p>
<h2>Line item subtotal limit</h2>
<p>Orders now validate that the combined value of all active line items stays within the subtotal limit. </p>
<p>This validation already exists at checkout and now applies to order editing as well. The current limit is set high enough to avoid blocking legitimate orders in normal use.</p>
<h3>Error message</h3>
<p><code>Line item subtotal exceeds the limit of {limit}</code></p>
</div> ]]></description>
    <pubDate>Fri, 05 Dec 2025 17:00:00 +0000</pubDate>
    <atom:published>2025-12-05T17:00:00.000Z</atom:published>
    <atom:updated>2026-02-05T16:02:17.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <category>Admin GraphQL API</category>
    <link>https://shopify.dev/changelog/order-editing-new-validations-and-handled-usererrors</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/order-editing-new-validations-and-handled-usererrors</guid>
  </item>
  <item>
    <title>InventoryItem.variant field deprecated in favor of InventoryItem.variants connection</title>
    <description><![CDATA[ <div class=""><p>The <code>InventoryItem.variant</code> field has been deprecated and will be removed in a future API version. Use the new <code>InventoryItem.variants</code> connection instead. </p>
<p>To learn more, see <a href="https://shopify.dev/docs/api/admin-graphql/latest/objects/InventoryItem" target="_blank" class="body-link"><code>InventoryItem</code> object</a> or <a href="https://shopify.dev/docs/api/admin-graphql/latest/queries/inventoryItem" target="_blank" class="body-link"><code>inventoryItem</code> query</a> in the GraphQL Admin API reference. </p>
<h3>Why we're making this change</h3>
<p>The new <code>variants</code> connection allows for retrieving <code>ProductVariants</code> through a paginated connection, rather than a single variant object. This update prepares the API to support multiple variants sharing a single inventory item in the future.</p>
<p>Initially the <code>variants</code> connection will return a single node. However, we recommend updating your integrations to handle <code>variants</code> as a connection to accommodate future changes.</p>
<h3>What you need to do</h3>
<p>Modify your GraphQL queries by replacing <code>variant</code> with <code>variants</code>. Since <code>variants</code> is a connection, ensure you request <code>edges</code> and <code>nodes</code>. Although the deprecated <code>variant</code> field remains functional in all supported API versions, including <code>2026-01</code> , it will eventually be removed. Updating your queries now will ensure they remain compatible with future API versions.</p>
<p><strong>Before (deprecated):</strong></p>
<pre><code class="language-graphql">{
  inventoryItem(id: &quot;gid://shopify/InventoryItem/123&quot;) {
    variant {
      id
      sku
    }
  }
}
</code></pre>
<p><strong>After (recommended):</strong></p>
<pre><code class="language-graphql">{
  inventoryItem(id: &quot;gid://shopify/InventoryItem/123&quot;) {
    variants(first: 10) {
      edges {
        node {
          id
          sku
        }
      }
    }
  }
}
</code></pre>
</div> ]]></description>
    <pubDate>Tue, 02 Dec 2025 17:00:00 +0000</pubDate>
    <atom:published>2025-12-02T17:00:00.000Z</atom:published>
    <atom:updated>2025-12-12T18:03:00.000Z</atom:updated>
    <category>API</category>
    <category>Deprecation announcement</category>
    <category>Admin GraphQL API</category>
    <category>2026-01</category>
    <link>https://shopify.dev/changelog/inventory-item-variant-field-deprecation</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/inventory-item-variant-field-deprecation</guid>
  </item>
  <item>
    <title>Tax summary webhook and calculation requests now includes shop and presentment currency amount</title>
    <description><![CDATA[ <div class=""><p>As of API version <code>2026-01</code>, the <code>tax_summaries/create</code> webhook and tax calculation requests for Tax Partner Apps include additional fields for currency. These fields provide amounts in both shop currency and presentment currency. This enhancement allows tax Partners to perform calculations and reporting in the merchant's accounting currency while maintaining the customer-facing currency for display.</p>
<h2>What's New</h2>
<p>The webhook and tax calculation request payloads now include new <a href="https://shopify.dev/docs/api/customer/2026-01/objects/MoneyBag" target="_blank" class="body-link"><code>MoneyBag</code></a> fields in both shop currency and presentment currency in the following locations:</p>
<ol>
<li><p><strong>Sale Records</strong> (<code>agreements[].sales[]</code>):</p>
<ul>
<li><code>discount_amount_set</code></li>
<li><code>tax_amount_set</code></li>
<li><code>amount_before_taxes_after_discounts_set</code></li>
<li><code>amount_after_taxes_after_discounts_set</code></li>
</ul>
</li>
<li><p><strong>Cart Line Costs</strong> (<code>delivery_groups[].cart_lines[].cost</code>):</p>
<ul>
<li><code>amount_per_quantity_set</code></li>
<li><code>subtotal_amount_set</code></li>
<li><code>total_amount_set</code></li>
</ul>
</li>
</ol>
<p>These fields complement the existing single-currency amount fields and are available when shops have multi-currency enabled.</p>
<h3>MoneyBag Structure</h3>
<p>The new <code>MoneyBag</code> fields contain two <a href="https://shopify.dev/docs/api/customer/2026-01/objects/MoneyV2" target="_blank" class="body-link"><code>MoneyV2</code></a>. Below is an example of the structure:</p>
<p><strong>Before (2025-10 and earlier):</strong> </p>
<pre><code class="language-json">{
    &quot;amount_before_taxes_after_discounts&quot;: {
        &quot;currency_code&quot;: &quot;CAD&quot;,
        &quot;amount&quot;: &quot;135.00&quot;
    }
}
</code></pre>
<p><strong>After (2026-01):</strong></p>
<pre><code class="language-json">{
    &quot;amount_before_taxes_after_discounts&quot;: {
        &quot;currency_code&quot;: &quot;CAD&quot;,
        &quot;amount&quot;: &quot;135.00&quot;
    },
    &quot;amount_before_taxes_after_discounts_set&quot;: {
        &quot;shop_money&quot;: {
            &quot;currency_code&quot;: &quot;USD&quot;,
            &quot;amount&quot;: &quot;100.00&quot;
        },
        &quot;presentment_money&quot;: {
            &quot;currency_code&quot;: &quot;CAD&quot;,
            &quot;amount&quot;: &quot;135.00&quot;
        }
    }
}
</code></pre>
</div> ]]></description>
    <pubDate>Sat, 22 Nov 2025 17:00:00 +0000</pubDate>
    <atom:published>2025-11-22T17:00:00.000Z</atom:published>
    <atom:updated>2025-11-28T14:51:21.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <category>Admin GraphQL API</category>
    <category>Events &amp; webhooks</category>
    <category>2026-01</category>
    <link>https://shopify.dev/changelog/tax-summary-webhook-and-calculation-requests-now-includes-shop-and-presentment-currency-amount</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/tax-summary-webhook-and-calculation-requests-now-includes-shop-and-presentment-currency-amount</guid>
  </item>
  <item>
    <title>Tax summary webhook `created_at` field now returns UTC timezone</title>
    <description><![CDATA[ <div class=""><h2>What's new</h2>
<p>The <code>created_at</code> field from <code>tax_summaries/create</code> webhook for tax partners will now return timestamps in UTC format with the <code>Z</code> suffix, including millisecond precision. </p>
<h2>Action required</h2>
<p>Update your parsing logic to handle the new format. The following are examples of the format prior to and after the change:</p>
<p>Versions prior to <code>2026-01</code>:</p>
<pre><code class="language-json">{
  &quot;id&quot;: 14,
  &quot;shop_id&quot;: 1,
  &quot;order_id&quot;: 7,
  &quot;created_at&quot;: &quot;2025-11-19T08:16:53-05:00&quot;,
  &quot;summary&quot;: {
    ...
  }
}
</code></pre>
<p>Versions <code>2026-01</code> and higher.</p>
<pre><code class="language-json">{
  &quot;id&quot;: 14,
  &quot;shop_id&quot;: 1,
  &quot;order_id&quot;: 7,
  &quot;created_at&quot;: &quot;2025-11-19T13:16:53.784Z&quot;,
  &quot;summary&quot;: {
    ...
  }
}
</code></pre>
</div> ]]></description>
    <pubDate>Thu, 20 Nov 2025 17:00:00 +0000</pubDate>
    <atom:published>2025-11-20T17:00:00.000Z</atom:published>
    <atom:updated>2025-11-20T17:13:38.000Z</atom:updated>
    <category>Action Required</category>
    <category>API</category>
    <category>Breaking API Change</category>
    <category>Events &amp; webhooks</category>
    <category>Admin GraphQL API</category>
    <category>2026-01</category>
    <link>https://shopify.dev/changelog/tax-summary-webhook-created-at-field-now-returns-utc-timezone</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/tax-summary-webhook-created-at-field-now-returns-utc-timezone</guid>
  </item>
  <item>
    <title>Shopify Dev MCP now supports POS UI extensions</title>
    <description><![CDATA[ <div class=""><p>The <a href="https://shopify.dev/docs/apps/build/devmcp" target="_blank" class="body-link">Shopify Dev MCP server</a> now includes support for code generation for <a href="https://shopify.dev/docs/api/pos-ui-extensions/latest" target="_blank" class="body-link">POS (Point of Sale) UI extensions</a>.</p>
<p>With this update, you can use the Shopify Dev MCP as a virtual pair programmer within your preferred IDE. This enhancement allows you to:</p>
<ul>
<li>Generate code snippets efficiently</li>
<li>Explore API capabilities seamlessly</li>
<li>Accelerate your development process across the Shopify platform</li>
</ul>
<h2>Get Started</h2>
<p>If you're already using the Shopify Dev MCP server, support for POS UI extensions is automatically included in the latest version. If not, follow these steps to get started:</p>
<ol>
<li><a href="https://shopify.dev/docs/apps/build/devmcp#set-up-the-server" target="_blank" class="body-link">Configure the Shopify Dev MCP server</a> to integrate it with your development environment.</li>
<li>Unlock the new capabilities by ensuring your setup is up-to-date.</li>
</ol>
<p>By following these steps, you can take full advantage of the new features and enhance your development workflow.</p>
</div> ]]></description>
    <pubDate>Mon, 17 Nov 2025 17:00:00 +0000</pubDate>
    <atom:published>2025-11-17T17:00:00.000Z</atom:published>
    <atom:updated>2025-11-17T17:28:39.000Z</atom:updated>
    <category>Tools</category>
    <category>New</category>
    <link>https://shopify.dev/changelog/dev-mcp-now-supports-pos-ui-extensions</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/dev-mcp-now-supports-pos-ui-extensions</guid>
  </item>
  <item>
    <title>New Google Cloud Run deployment tutorial released</title>
    <description><![CDATA[ <div class=""><p>We're excited to introduce a new <a href="https://shopify.dev/docs/apps/launch/deployment/deploy-to-google-cloud-run" target="_blank" class="body-link">deployment tutorial for Google Cloud Run</a>.</p>
<p>After scaffolding a Shopify app through the CLI and building out functionality in a local development store, what's next? </p>
<p>Deployment!</p>
<p>This tutorial guides you through the complete process of deploying your production Shopify apps, using Google Cloud Run as the target. You'll configure a project with the necessary permissions for continuous deployment, you'll set up a production database for persistent storage, and configure load balancing for multiple instances of your app across multiple regions.</p>
<p>Take a look and share your thoughts (including how you deploy your apps differently) on the <a href="https://community.shopify.dev/" target="_blank" class="body-link">Shopify community forum</a>!</p>
</div> ]]></description>
    <pubDate>Thu, 13 Nov 2025 17:00:00 +0000</pubDate>
    <atom:published>2025-11-13T17:00:00.000Z</atom:published>
    <atom:updated>2025-11-13T21:30:40.000Z</atom:updated>
    <category>Tools</category>
    <category>Update</category>
    <link>https://shopify.dev/changelog/new-google-cloud-run-deployment-tutorial-released</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/new-google-cloud-run-deployment-tutorial-released</guid>
  </item>
  <item>
    <title>Tax webhook summary and calculation requests now use Global IDs</title>
    <description><![CDATA[ <div class=""><p>Starting with API version 2026-01, third-party tax apps will receive <a href="https://shopify.dev/docs/api/usage/gids" target="_blank" class="body-link">Global IDs (GIDs)</a> in tax calculation requests and tax summary webhook payloads for all entity references of the summary section. This aligns with how Partners interact with other Shopify APIs.</p>
<p>These apps can now use the same identifiers across all Shopify endpoints without managing different ID formats for tax-specific integrations. </p>
<h2>What's changed</h2>
<p>This change affects two key integration points:</p>
<p><strong>Tax calculation requests:</strong></p>
<ul>
<li><code>Customer</code>, <code>Company</code>, <code>CompanyLocation</code>, <code>Product</code>, and <code>ProductVariant</code> IDs now use the GID format.</li>
</ul>
<p><strong>Tax summary webhooks:</strong></p>
<ul>
<li>All entity IDs within the summary section (<a href="https://shopify.dev/docs/api/storefront/latest/objects/Order" target="_blank" class="body-link"><code>Order</code></a>, <a href="https://shopify.dev/docs/api/customer/latest/objects/Customer" target="_blank" class="body-link"><code>Customer</code></a>, <a href="https://shopify.dev/docs/api/admin-graphql/latest/objects/Product" target="_blank" class="body-link"><code>Product</code></a>, <a href="https://shopify.dev/docs/api/admin-graphql/latest/objects/ProductVariant" target="_blank" class="body-link"><code>ProductVariant</code></a>, <code>SalesAgreement</code>, <code>Sale</code>, <a href="https://shopify.dev/docs/api/customer/latest/objects/LineItem" target="_blank" class="body-link"><code>LineItem</code></a>, <a href="https://shopify.dev/docs/api/customer/latest/objects/Company" target="_blank" class="body-link"><code>Company</code></a>, <a href="https://shopify.dev/docs/api/customer/latest/objects/CompanyLocation" target="_blank" class="body-link"><code>CompanyLocation</code></a> <a href="https://shopify.dev/docs/api/customer/latest/objects/ShippingLine" target="_blank" class="body-link"><code>ShippingLine</code></a>, and <a href="https://shopify.dev/docs/api/customer/latest/objects/TaxLine" target="_blank" class="body-link"><code>TaxLine</code></a>) now use the GID format.</li>
<li>The webhook payload also includes new <code>admin_graphql_api_id</code> fields at the top level for <code>TaxSummary</code>, <code>Shop</code>, and <code>Order</code> entities.</li>
</ul>
<p>Changes include:</p>
<ul>
<li><strong>Top Level:</strong> Adds <code>shop_admin_graphql_api_id</code> and <code>order_admin_graphql_api_id</code> fields (existing <code>shop_id</code> and <code>order_id</code> remain as integers).</li>
<li><strong>Customer IDs:</strong> Changes from <code>&quot;id&quot;: &quot;5&quot;</code> to <code>&quot;id&quot;: &quot;gid://shopify/Customer/5&quot;</code>.</li>
<li><strong>Product IDs:</strong> Changes from <code>&quot;id&quot;: &quot;1&quot;</code> to <code>&quot;id&quot;: &quot;gid://shopify/Product/1&quot;</code>.</li>
<li><strong>Product Variant IDs:</strong> Changes from <code>&quot;id&quot;: &quot;1&quot;</code> to <code>&quot;id&quot;: &quot;gid://shopify/ProductVariant/1&quot;</code>.</li>
<li><strong>Line Item IDs:</strong> Changes from <code>&quot;line_item_id&quot;: &quot;5&quot;</code> to <code>&quot;line_item_id&quot;: &quot;gid://shopify/LineItem/5&quot;</code>.</li>
<li><strong>Sale IDs:</strong> Changes from <code>&quot;id&quot;: &quot;9&quot;</code> to <code>&quot;id&quot;: &quot;gid://shopify/Sale/9&quot;</code>.</li>
<li><strong>Agreement IDs:</strong> Changes from <code>&quot;id&quot;: &quot;6&quot;</code> to <code>&quot;id&quot;: &quot;gid://shopify/Agreement/6&quot;</code>.</li>
<li><strong>Company IDs:</strong> Changes from <code>&quot;id&quot;: &quot;3&quot;</code> to <code>&quot;id&quot;: &quot;gid://shopify/Company/3&quot;</code>.</li>
<li><strong>Company Location IDs:</strong> Changes from <code>&quot;id&quot;: &quot;4&quot;</code> to <code>&quot;id&quot;: &quot;gid://shopify/CompanyLocation/4&quot;</code>.</li>
<li><strong>Shipping Line IDs:</strong> Changes from <code>&quot;id&quot;: &quot;4&quot;</code> to <code>&quot;id&quot;: &quot;gid://shopify/ShippingLine/4&quot;</code>.</li>
<li><strong>Tax Line IDs:</strong> Changes from <code>&quot;id&quot;: 6</code> to <code>&quot;id&quot;: &quot;gid://shopify/TaxLine/6&quot;</code>.</li>
</ul>
<h2>What you need to do</h2>
<p>Update your integrations to handle the GID format when processing tax calculations and webhook payloads in API version 2026-01 and later. The following are some examples:</p>
<h3>Tax calculation request</h3>
<p><strong>Before (2025-10 and earlier):</strong> </p>
<pre><code class="language-json">{
  &quot;cart&quot;: {
    &quot;buyer_identity&quot;: {
      &quot;customer&quot;: {
        &quot;id&quot;: &quot;593934299&quot;
      }
    }
  }
}
</code></pre>
<p><strong>After (2026-01):</strong></p>
<pre><code class="language-json">{
  &quot;cart&quot;: {
    &quot;buyer_identity&quot;: {
      &quot;customer&quot;: {
        &quot;id&quot;: &quot;gid://shopify/Customer/593934299&quot;
      }
    }
  }
}
</code></pre>
<h3>Tax summary webhook</h3>
<p><strong>Before (2025-10 and earlier):</strong></p>
<pre><code class="language-json">{
  &quot;id&quot;: 80,
  &quot;shop_id&quot;: 1,
  &quot;order_id&quot;: 64,
  &quot;summary&quot;: {
    &quot;agreements&quot;: [{
      &quot;id&quot;: &quot;82&quot;,
      &quot;sales&quot;: [{
        &quot;id&quot;: &quot;106&quot;,
        &quot;line_item_id&quot;: &quot;76&quot;
      }]
    }]
  }
}
</code></pre>
<p><strong>After (2026-01):</strong></p>
<pre><code class="language-json">{
  &quot;id&quot;: 80,
  &quot;admin_graphql_api_id&quot;: &quot;gid://shopify/TaxSummary/80&quot;,
  &quot;shop_id&quot;: 1,
  &quot;shop_admin_graphql_api_id&quot;: &quot;gid://shopify/Shop/1&quot;,
  &quot;order_id&quot;: 64,
  &quot;order_admin_graphql_api_id&quot;: &quot;gid://shopify/Order/64&quot;,
  &quot;summary&quot;: {
    &quot;agreements&quot;: [{
      &quot;id&quot;: &quot;gid://shopify/SalesAgreement/82&quot;,
      &quot;sales&quot;: [{
        &quot;id&quot;: &quot;gid://shopify/Sale/106&quot;,
        &quot;line_item_id&quot;: &quot;gid://shopify/LineItem/76&quot;
      }]
    }]
  }
}
</code></pre>
</div> ]]></description>
    <pubDate>Wed, 12 Nov 2025 17:00:00 +0000</pubDate>
    <atom:published>2025-11-12T17:00:00.000Z</atom:published>
    <atom:updated>2025-11-12T17:00:00.000Z</atom:updated>
    <category>Action Required</category>
    <category>API</category>
    <category>Breaking API Change</category>
    <category>Admin GraphQL API</category>
    <category>Events &amp; webhooks</category>
    <category>2026-01</category>
    <link>https://shopify.dev/changelog/tax-webhook-summary-and-calculation-requests-now-use-global-ids</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/tax-webhook-summary-and-calculation-requests-now-use-global-ids</guid>
  </item>
  <item>
    <title>Protected customer data scopes required for web pixel PII access starting on December 10th</title>
    <description><![CDATA[ <div class=""><p>We will be enforcing Shopify's protected customer data policy for all web pixel extensions starting on December 10th, 2025. Customer personally identifiable information (PII)—including name, email, phone, and address fields—will only be present in web pixel payloads when the app has been approved for the corresponding protected scopes.</p>
<h2>What’s changing</h2>
<ul>
<li>Web pixel payloads will be filtered at runtime based on the app’s approved access scopes.</li>
<li>If your app is not approved for a given scope, the corresponding fields in the pixel event will be set to null. Event data structure remains stable.</li>
<li>Enforcement applies on all web pixel surfaces: storefront, checkout, and customer accounts.</li>
<li>Custom pixels are out of scope for this change.</li>
</ul>
<h2>Protected scopes enforced</h2>
<ul>
<li>read_customer_name</li>
<li>read_customer_email</li>
<li>read_customer_phone</li>
<li>read_customer_address</li>
<li>read_customer_personal_data</li>
</ul>
<h2>Example</h2>
<pre><code>{
  &quot;event&quot;: &quot;checkout_completed&quot;,
  &quot;customer&quot;: {
    &quot;email&quot;: null,           // null if not approved for read_customer_email
    &quot;first_name&quot;: null,      // null if not approved for read_customer_name
    &quot;phone&quot;: null            // null if not approved for read_customer_phone
  },
  &quot;shipping_address&quot;: {
     &quot;first_name&quot;: null,	// null if not approved for read_customer_name
     &quot;address_1&quot;: null, 	// null if not approved for read_customer_address
     &quot;address_2&quot;: null, 	// null if not approved for read_customer_address
     &quot;zip&quot;: null,      	// null if not approved for read_customer_address
     &quot;phone&quot;: null            // null if not approved for read_customer_phone
     [other address fields exempt]
  }
}
</code></pre>
<p>Non-PII data events will continue to fire normally. Your analytics, conversion tracking, and non-PII use cases will not be affected.</p>
<h2>What you need to do</h2>
<ul>
<li><strong>Review and request access.</strong> Ensure you have approval for the protected scopes you require. See <a href="https://shopify.dev/docs/apps/launch/protected-customer-data" target="_blank" class="body-link">Protected Customer Data Policy</a>. You should only request the scopes your app uses.</li>
<li><strong>Update your code paths.</strong> Handle null for gated fields without breaking event handling or analytics pipelines.</li>
<li><strong>Test across surfaces.</strong> Verify behavior on storefront, checkout, and customer accounts. No downtime is expected.</li>
</ul>
<p>This change will take effect starting on December 10th, 2025. We recommend submitting your request for protected customer data review as soon as possible if you need to maintain access to these values. </p>
<p>No action is needed if your app is already approved for protected customer data, or is resilient to null values. If you have questions about this change, please comment on this post in the Developer Community forums.</p>
</div> ]]></description>
    <pubDate>Mon, 10 Nov 2025 15:00:00 +0000</pubDate>
    <atom:published>2025-11-10T15:00:00.000Z</atom:published>
    <atom:updated>2025-11-10T15:00:00.000Z</atom:updated>
    <category>Action Required</category>
    <category>Platform</category>
    <category>Update</category>
    <link>https://shopify.dev/changelog/protected-customer-data-scopes-required</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/protected-customer-data-scopes-required</guid>
  </item>
  <item>
    <title>tax_summaries/create webhook and taxSummaryCreate mutation now available</title>
    <description><![CDATA[ <div class=""><p>As of the 2026-01 API version, the <code>tax_summaries/create</code> webhook and <code>taxSummaryCreate</code> mutation are available for Tax Partner Apps.</p>
<h2>What's New</h2>
<p>The <code>taxSummaryCreate</code> mutation enables apps to request the generation of tax summaries for orders. The <code>tax_summaries/create</code> webhook is triggered by events that may affect tax liability, such as fulfillments and refunds.</p>
<h3>Using the Mutation</h3>
<p>The mutation accepts either a specific order ID or a time range for bulk processing:</p>
<pre><code class="language-graphql">mutation {
  taxSummaryCreate(orderId: &quot;gid://shopify/Order/123456789&quot;) {
    enqueuedOrders {
      id
    }
    userErrors {
      field
      message
    }
  }
}
</code></pre>
<h3>Webhook Payload</h3>
<p>The <code>tax_summaries/create</code> webhook provides comprehensive tax data, including:</p>
<ul>
<li>Sales agreements and associated sales details</li>
<li>Delivery groups with fulfillment information</li>
<li>Tax exemption details</li>
<li>Return sales types for refund workflows</li>
<li>Order context and financial status</li>
</ul>
<h3>Requirements</h3>
<ul>
<li><strong>Access Scope:</strong> <code>write_taxes</code></li>
<li><strong>Tax Platform Access:</strong> Tax Platform features</li>
</ul>
<h2>Learn More</h2>
<p>For information about the Tax Platform and partnership opportunities, see <a href="https://shopify.dev/docs/apps/build/tax" target="_blank" class="body-link">Building tax apps</a>.</p>
</div> ]]></description>
    <pubDate>Wed, 05 Nov 2025 16:00:00 +0000</pubDate>
    <atom:published>2025-11-05T16:00:00.000Z</atom:published>
    <atom:updated>2025-11-05T16:00:00.000Z</atom:updated>
    <category>API</category>
    <category>Update</category>
    <category>Admin GraphQL API</category>
    <category>Events &amp; webhooks</category>
    <category>2026-01</category>
    <link>https://shopify.dev/changelog/taxsummariescreate-webhook-and-taxsummarycreate-mutation-now-available</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/taxsummariescreate-webhook-and-taxsummarycreate-mutation-now-available</guid>
  </item>
  <item>
    <title>Carrier Service API now includes order totals and customer tags</title>
    <description><![CDATA[ <div class=""><p>The Carrier Service API callback payload now includes order totals and customer tags. This enhancement enables more effective shipping rate calculations by taking into account the order value and customer segments.</p>
<p><strong>New Payload Fields:</strong></p>
<ul>
<li><code>order_totals</code><ul>
<li><code>subtotal_price</code>: The total price of all items in the cart before discounts.</li>
<li><code>total_price</code>: The final price after discounts and taxes.</li>
<li><code>discount_amount</code>: The total discounts applied to the order.</li>
</ul>
</li>
<li><code>customer</code><ul>
<li><code>id</code>: The unique identifier for the customer.</li>
<li><code>tags</code>: Labels associated with the customer, useful for segmentation.</li>
</ul>
</li>
</ul>
<p><strong>Important:</strong> The <code>subtotal_price</code> might be higher than the sum of the items in the <code>items</code> array, as this array only includes physical items that require shipping.</p>
<p>These new fields are automatically included in all callback requests, allowing you to customize shipping rates using detailed order and customer information. For implementation details, refer to the <a href="https://shopify.dev/docs/api/admin-graphql/latest/queries/carrierservice" target="_blank" class="body-link">Carrier Service API documentation</a>.</p>
<p>Update your shipping rate calculations to leverage these new fields for a more personalized shipping experience.</p>
</div> ]]></description>
    <pubDate>Tue, 04 Nov 2025 17:00:00 +0000</pubDate>
    <atom:published>2025-11-04T17:00:00.000Z</atom:published>
    <atom:updated>2025-11-12T12:09:05.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <category>Admin GraphQL API</category>
    <link>https://shopify.dev/changelog/carrier-service-api-now-includes-order-totals-and-customer-tags</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/carrier-service-api-now-includes-order-totals-and-customer-tags</guid>
  </item>
  <item>
    <title>Order Update Phone Field Public</title>
    <description><![CDATA[ <div class=""><p>As of Admin API 2026-01, the <code>phone</code> field is now publicly available in the <a href="https://shopify.dev/docs/api/admin-graphql/latest/mutations/orderUpdate" target="_blank" class="body-link">orderUpdate</a> mutation's <a href="https://shopify.dev/docs/api/admin-graphql/latest/input-objects/OrderInput" target="_blank" class="body-link">OrderInput</a>. This field allows developers to update the customer phone number for an order, overwriting the existing phone number.</p>
<p>This change brings parity with the REST API, which already supports updating the phone field through the <a href="https://shopify.dev/docs/api/admin-rest/latest/resources/order#put-orders-order-id" target="_blank" class="body-link">Order resource</a>. The phone field is particularly useful for maintaining accurate customer contact information, especially for SMS notifications and order-related communications.</p>
<p>For implementation details, refer to the <a href="https://shopify.dev/docs/api/admin-graphql/latest/mutations/orderUpdate" target="_blank" class="body-link">orderUpdate mutation documentation</a>.</p>
</div> ]]></description>
    <pubDate>Sat, 01 Nov 2025 04:00:00 +0000</pubDate>
    <atom:published>2025-11-01T04:00:00.000Z</atom:published>
    <atom:updated>2025-11-01T04:00:00.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <category>Admin GraphQL API</category>
    <category>2026-01</category>
    <link>https://shopify.dev/changelog/order-update-phone-field-public</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/order-update-phone-field-public</guid>
  </item>
  <item>
    <title>New Queries for Bulk Operations</title>
    <description><![CDATA[ <div class=""><p>We've introduced new GraphQL queries to help you retrieve and manage bulk operations in the Admin API.</p>
<h2>What's Changed</h2>
<p>Here's an overview of the updates:</p>
<h3>New Bulk Operations Retrieval Queries</h3>
<p>We have added two new queries for accessing your bulk operations:</p>
<ul>
<li><code>bulkOperations</code>: A connection-based query that returns a paginated list of all your bulk operations, complete with filtering and sorting options.</li>
<li><code>bulkOperation</code>: A single-object query that retrieves a specific bulk operation by its ID.</li>
</ul>
<h3>Enhanced Filtering and Search Capabilities</h3>
<p>The <code>bulkOperations</code> connection now supports flexible querying with the following features:</p>
<ul>
<li><strong>Status Filtering:</strong> Locate operations by status (e.g., canceled, completed, running).</li>
<li><strong>Type Filtering:</strong> Filter operations by type (query or mutation).</li>
<li><strong>Date Filtering:</strong> Search for operations created before or after a specific date.</li>
<li><strong>Sorting Options:</strong> Sort operations by <code>created_at</code>, <code>completed_at</code>, or <code>status</code> in ascending or descending order.</li>
<li><strong>Search Syntax:</strong> Use <code>field:value</code> patterns for precise filtering.</li>
</ul>
<h2>What You Need to Do</h2>
<p>Depending on your requirements, follow these steps:</p>
<h3>To List and Filter Bulk Operations</h3>
<p>Utilize the <code>bulkOperations</code> connection query with search syntax:</p>
<pre><code class="language-graphql">query {
  bulkOperations(
    first: 10
    query: &quot;status:completed operation_type:query created_at:&gt;2025-10-10&quot;
    sortKey: CREATED_AT
    reverse: true
  ) {
    edges {
      node {
        id
        status
        query
        createdAt
        completedAt
        url
      }
    }
    pageInfo {
      hasNextPage
      hasPreviousPage
    }
  }
}
</code></pre>
<h3>To Retrieve a Specific Bulk Operation</h3>
<p>Use the <code>bulkOperation</code> query:</p>
<pre><code class="language-graphql">query {
  bulkOperation(id: &quot;gid://shopify/BulkOperation/123456789&quot;) {
    id
    status
    query
    createdAt
    completedAt
    url
    errorCode
  }
}
</code></pre>
<h3>If You're Using Existing Bulk Operation Workflows</h3>
<p>No changes are necessary. The <code>currentBulkOperation</code> can still be used but is being deprecated.</p>
<h2>Why We Made This Change</h2>
<p>Previously, you could only access the most recent bulk operation through <code>currentBulkOperation</code>. These new queries offer:</p>
<ul>
<li>Complete visibility into all your bulk operations, not just the current one.</li>
<li>Enhanced debugging capabilities by filtering operations by status or date.</li>
<li>Efficient pagination for managing large numbers of operations.</li>
<li>Simplified monitoring, debugging, and management of bulk operations at scale.</li>
</ul>
<h2>Learn More</h2>
<ul>
<li><a href="https://shopify.dev/api/usage/bulk-operations/queries" target="_blank" class="body-link">Bulk Operations Queries Guide</a></li>
</ul>
</div> ]]></description>
    <pubDate>Fri, 31 Oct 2025 16:00:00 +0000</pubDate>
    <atom:published>2025-10-31T16:00:00.000Z</atom:published>
    <atom:updated>2025-10-31T16:00:00.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <category>Admin GraphQL API</category>
    <category>2026-01</category>
    <link>https://shopify.dev/changelog/new-queries-for-bulk-operations</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/new-queries-for-bulk-operations</guid>
  </item>
  <item>
    <title>Support metafield and metaobject standards in Declarative Custom Data Definitions </title>
    <description><![CDATA[ <div class=""><p>We now support enabling and referencing standard metafield and metaobject definitions through an app’s TOML file. Key benefits include:</p>
<ul>
<li>Standard metafield and metaobject definitions can be enabled through TOML, and managed through the <a href="https://shopify.dev/docs/apps/build/cli-for-apps/test-apps-locally" target="_blank" class="body-link">app dev</a> or <a href="https://shopify.dev/docs/apps/launch/deployment/deploy-app-versions" target="_blank" class="body-link">app deploy</a> command.</li>
<li>Shopify automatically distributes these definitions to multiple shops simultaneously, significantly speeding up migration processes.</li>
<li>Updates are atomic, ensuring that all stores consistently maintain the same version of your definitions.</li>
</ul>
<p>For more information, see the <a href="https://shopify.dev/docs/apps/build/custom-data" target="_blank" class="body-link">custom data documentation</a> on shopify.dev.</p>
</div> ]]></description>
    <pubDate>Fri, 31 Oct 2025 16:00:00 +0000</pubDate>
    <atom:published>2025-10-31T16:00:00.000Z</atom:published>
    <atom:updated>2025-10-31T16:00:00.000Z</atom:updated>
    <category>Tools</category>
    <category>New</category>
    <link>https://shopify.dev/changelog/support-metafield-and-metaobject-standards-in-declarative-custom-data-definitions</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/support-metafield-and-metaobject-standards-in-declarative-custom-data-definitions</guid>
  </item>
  <item>
    <title>The `cartDiscountCodeUpdate` mutation now requires the `discountCodes` field</title>
    <description><![CDATA[ <div class=""><p>As part of the <a href="https://shopify.dev/docs/api/storefront/2026-01/mutations/cartdiscountcodesupdate" target="_blank" class="body-link">GraphQL Storefront API 2026-01 release</a>, the <code>cartDiscountCodesUpdate</code> mutation now requires the <code>discountCodes</code> agrument to be included. Previously, the <code>cartDiscountCodesUpdate</code> mutation would accept a mutation with no <code>discountCodes</code> argument, which would not actually modify the cart in any way.</p>
<p>For more information about the <code>Cart</code> object and its related mutations, visit <a href="https://shopify.dev/api/storefront/unstable/objects/Cart" target="_blank" class="body-link">Shopify.dev</a>. </p>
</div> ]]></description>
    <pubDate>Thu, 30 Oct 2025 19:00:00 +0000</pubDate>
    <atom:published>2025-10-30T19:00:00.000Z</atom:published>
    <atom:updated>2025-10-30T19:00:00.000Z</atom:updated>
    <category>Action Required</category>
    <category>API</category>
    <category>Update</category>
    <category>Storefront API</category>
    <category>2026-01</category>
    <link>https://shopify.dev/changelog/the-cartdiscountcodeupdate-mutation-now-requires-the-discountcodes-field</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/the-cartdiscountcodeupdate-mutation-now-requires-the-discountcodes-field</guid>
  </item>
  <item>
    <title>Built for Shopify apps get priority visibility across the Shopify App Store</title>
    <description><![CDATA[ <div class=""><p>Built for Shopify (BFS) apps are now featured more prominently across key App Store surfaces, helping merchants discover them faster.</p>
<p><strong>What's new:</strong></p>
<ul>
<li><strong>Homepage spotlight:</strong> BFS now appears in the featured header section of the <a href="https://apps.shopify.com" target="_blank" class="body-link">App Store homepage</a>, giving certified apps maximum exposure to browsing merchants.</li>
<li><strong>Priority recommendations:</strong> BFS apps receive preferential positioning on some category pages.</li>
<li><strong>Interactive BFS badge:</strong> All BFS badges across the App Store are now clickable to provide merchant education on BFS standards.</li>
</ul>
<p>These enhancements work alongside existing <a href="https://shopify.dev/docs/apps/launch/built-for-shopify" target="_blank" class="body-link">Built for Shopify benefits</a> including ranking boosts and the BFS search filter, making Built for Shopify the most effective way to maximize your app’s visibility and discovery potential in the App Store. </p>
</div> ]]></description>
    <pubDate>Thu, 30 Oct 2025 15:50:00 +0000</pubDate>
    <atom:published>2025-10-30T15:50:00.000Z</atom:published>
    <atom:updated>2025-10-30T15:50:00.000Z</atom:updated>
    <category>Built for Shopify</category>
    <category>Update</category>
    <link>https://shopify.dev/changelog/built-for-shopify-apps-get-priority-visibility-across-the-shopify-app-store</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/built-for-shopify-apps-get-priority-visibility-across-the-shopify-app-store</guid>
  </item>
  <item>
    <title>Bulk operations group objects default changed to `false`</title>
    <description><![CDATA[ <div class=""><p>We have optimized the output of bulk operations in the GraphQL Admin API to enhance speed and reliability.</p>
<h2>What's Changed</h2>
<h3>Bulk Queries (<code>bulkOperationRunQuery</code>)</h3>
<p>The <a href="https://shopify.dev/docs/api/admin-graphql/2026-01/mutations/bulkoperationrunquery#arguments-groupObjects" target="_blank" class="body-link"><code>groupObjects</code></a> argument now defaults to <code>false</code>. Grouping objects can slow down operations and increase failure rates, especially with large datasets.</p>
<h3>Bulk Mutations (<code>bulkOperationRunMutation</code>)</h3>
<p>The <a href="https://shopify.dev/docs/api/admin-graphql/2026-01/mutations/bulkoperationrunmutation#arguments-groupObjects" target="_blank" class="body-link"><code>groupObjects</code></a> argument is now deprecated. It does not affect the order of output files because mutation outputs do not have parent objects.</p>
<h2>What You Need to Do</h2>
<h3>If You're Running Bulk Queries</h3>
<ul>
<li><strong>To maintain grouped output</strong>: Set <code>groupObjects: true</code>.</li>
</ul>
<pre><code class="language-graphql">  mutation {
    bulkOperationRunQuery(
      query: &quot;&quot;&quot;
      {
        products {
          edges {
            node {
              id
              title
            }
          }
        }
      }
      &quot;&quot;&quot;
      groupObjects: true  // Add this to maintain grouped output
    ) {
      bulkOperation {
        id
        status
      }
      userErrors {
        field
        message
      }
    }
  }
</code></pre>
<h3>If You're Running Bulk Mutations</h3>
<p>Remove the <code>groupObjects</code> argument from your queries. This will not impact the output files.</p>
<h2>Why We Made This Change</h2>
<p>Most applications do not require grouped output and the associated overhead negatively impacts performance. These changes deliver faster, more predictable results that are easier to process at scale. Enable <code>groupObjects</code> only if your application specifically depends on the grouped output format. As this was the default behavior previously, you can verify on any version after <code>2025-07</code> by setting <code>groupObjects</code> to <code>false</code> and testing your application.</p>
<p>For optimal performance, omit <code>groupObjects</code> on or after <code>2026-01</code>, and disable this option if you are on <code>2025-07</code> or <code>2025-10</code>.</p>
<h2>Learn More</h2>
<ul>
<li><a href="https://shopify.dev/api/usage/bulk-operations/queries" target="_blank" class="body-link">Bulk Operations Queries Guide</a></li>
<li><a href="https://shopify.dev/api/usage/bulk-operations/imports" target="_blank" class="body-link">Bulk Operations Imports Guide</a></li>
<li><a href="https://shopify.dev/api/usage/bulk-operations/queries#step-3-retrieve-data" target="_blank" class="body-link">Working with JSONL Output</a></li>
</ul>
</div> ]]></description>
    <pubDate>Wed, 29 Oct 2025 14:00:00 +0000</pubDate>
    <atom:published>2025-10-29T14:00:00.000Z</atom:published>
    <atom:updated>2026-07-09T22:27:35.000Z</atom:updated>
    <category>Action Required</category>
    <category>API</category>
    <category>Breaking API Change</category>
    <category>Admin GraphQL API</category>
    <category>2026-01</category>
    <link>https://shopify.dev/changelog/bulk-operations-group-objects-default-changed-to-false</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/bulk-operations-group-objects-default-changed-to-false</guid>
  </item>
  <item>
    <title>Optional location inputs for inventory transfers</title>
    <description><![CDATA[ <div class=""><p>You can now create inventory transfers without specifying an origin or destination location. </p>
<p>Previously, the <a href="https://shopify.dev/docs/api/admin-graphql/2025-10/mutations/inventorytransfercreateasreadytoship" target="_blank" class="body-link"><code>InventoryTransferCreateAsReadyToShip</code></a> mutation required both origin and destination location IDs. </p>
<p>Now, these inputs are optional. This change supports workflows where the transfer's origin or destination is unknown at creation time.</p>
<blockquote>
<p>Note:
You must provide at least one of origin or location as input to validate the mutation.</p>
</blockquote>
<p>Example:</p>
<pre><code class="language-graphql">mutation OmitOriginExample {
  inventoryTransferCreateAsReadyToShip(
    input: {
      lineItems: [
        { inventoryItemId: &quot;gid://shopify/InventoryItem/...&quot;, quantity: 5 }
      ]
      originLocationId: null,
      destinationLocationId: &quot;gid://shopify/Location/...&quot;,
    }
  ) {
    inventoryTransfer {
      id
      status
      origin { name }
      destination { name }
    }
  }
}
</code></pre>
<h2>What you need to do</h2>
<p>Nothing.</p>
<p>This isn't a breaking change. No action is required. Existing apps that provide IDs for inventory transfer origins or destinations will continue to function correctly. If your app previously required these fields, then you can update your validation logic to treat them as optional.</p>
</div> ]]></description>
    <pubDate>Mon, 27 Oct 2025 16:00:00 +0000</pubDate>
    <atom:published>2025-10-27T16:00:00.000Z</atom:published>
    <atom:updated>2025-10-27T16:00:00.000Z</atom:updated>
    <category>API</category>
    <category>Update</category>
    <category>Admin GraphQL API</category>
    <category>2026-01</category>
    <link>https://shopify.dev/changelog/optional-location-inputs-for-inventory-transfers</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/optional-location-inputs-for-inventory-transfers</guid>
  </item>
  <item>
    <title>New ACH support for deferred payments</title>
    <description><![CDATA[ <div class=""><p>The 2026-01 Admin GraphQL API introduces support for ACH payment methods, enabling merchants to accept and manage bank account-based payments through Shopify Payments. This means new types of <a href="https://shopify.dev/docs/api/admin-graphql/latest/unions/paymentinstrument" target="_blank" class="body-link">PaymentInstrument</a> and <a href="https://shopify.dev/docs/api/admin-graphql/latest/unions/CustomerPaymentInstrument" target="_blank" class="body-link">CustomerPaymentInstrument</a> are now available for B2B company locations, supporting payment terms and draft orders. If your integration manages the payment lifecycle of those ways to sell, consider upgrading. If you are not on the latest version of the API, you will not find these available payment methods.</p>
<p><strong>New Objects:</strong></p>
<ul>
<li><code>BankAccount</code> - Represents a bank account payment instrument</li>
</ul>
<p><strong>Updated Types:</strong></p>
<ul>
<li><code>PaymentInstrument</code> union - Now includes <code>BankAccount</code></li>
<li><code>CustomerPaymentInstrument</code> union - Now includes <code>BankAccount</code></li>
</ul>
</div> ]]></description>
    <pubDate>Fri, 24 Oct 2025 16:00:00 +0000</pubDate>
    <atom:published>2025-10-24T16:00:00.000Z</atom:published>
    <atom:updated>2025-10-24T16:00:00.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <category>Admin GraphQL API</category>
    <category>2026-01</category>
    <link>https://shopify.dev/changelog/new-ach-support-for-deferred-payments</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/new-ach-support-for-deferred-payments</guid>
  </item>
  <item>
    <title>Increased limits in metafield and metaobject definitions</title>
    <description><![CDATA[ <div class=""><p>We've increased the limits for metafield and metaobject definitions, providing you with more flexibility when building custom data structures for your apps and stores.</p>
<ul>
<li><strong>For app developers</strong>: Each app has its own allocation, so apps aren't competing with each other for definition space.</li>
<li><strong>For merchants</strong>: Higher limits support complex workflows across multiple apps and meet custom data needs.</li>
<li><strong>For metaobject entries</strong>: The 1,000,000 entry limit per definition removes previous plan-based restrictions of 64,000 (non-Plus) and 128,000 (Plus).</li>
</ul>
<p>With these new limits, you can:</p>
<ul>
<li>Create more granular data structures in your apps.</li>
<li>Support larger catalogs and content libraries.</li>
<li>Build apps with richer metadata without worrying about hitting limits.</li>
</ul>
<h2>Changes to metaobject definitions</h2>
<p><strong>App definitions</strong></p>
<ul>
<li>Each app installed on a shop can create up to 256 metaobject definitions</li>
</ul>
<p><strong>Merchant definitions</strong></p>
<ul>
<li>128 definitions for Basic, Shopify, and Advanced plans</li>
<li>256 definitions for Plus and Enterprise plans</li>
</ul>
<p><strong>Metaobject entries</strong></p>
<ul>
<li>Up to 1,000,000 entries per definition</li>
</ul>
<h2>Changes to metafield definitions</h2>
<p><strong>App definitions</strong></p>
<ul>
<li>Each app can create up to 256 definitions per resource type</li>
</ul>
<p><strong>Merchant definitions</strong></p>
<ul>
<li>256 definitions per resource type</li>
</ul>
<blockquote>
<p>Note: Standard metaobject and metafield definitions do not count towards these limits.</p>
</blockquote>
<h2>Learn more</h2>
<ul>
<li><a href="https://shopify.dev/docs/apps/build/custom-data/metaobjects/metaobject-limits" target="_blank" class="body-link">Metaobject limits</a></li>
<li><a href="https://shopify.dev/docs/apps/build/custom-data/metafields/metafield-limits" target="_blank" class="body-link">Metafield limits</a></li>
<li><a href="https://shopify.dev/docs/apps/build/custom-data/metaobjects" target="_blank" class="body-link">Metaobjects overview</a></li>
<li><a href="https://shopify.dev/docs/apps/build/custom-data/metafields" target="_blank" class="body-link">Metafields overview</a></li>
</ul>
</div> ]]></description>
    <pubDate>Fri, 24 Oct 2025 13:00:00 +0000</pubDate>
    <atom:published>2025-10-24T13:00:00.000Z</atom:published>
    <atom:updated>2025-10-29T18:28:37.000Z</atom:updated>
    <category>Platform</category>
    <category>Update</category>
    <category>Admin GraphQL API</category>
    <category>Admin REST API</category>
    <link>https://shopify.dev/changelog/increased-limits-for-metafields-and-metaobjects</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/increased-limits-for-metafields-and-metaobjects</guid>
  </item>
  <item>
    <title>Updated online store promotion app store requirement</title>
    <description><![CDATA[ <div class=""><p>Effective Wednesday, November 5th, 2025, the following requirement for the online store has been revised:</p>
<ul>
<li><p>Your app must not use theme app extensions or blocks to promote your app, promote related apps, or request reviews.</p>
</li>
<li><p>App Name Branding in theme extensions is now permitted only under specific conditions: when customers directly interact with branded elements as a key aspect of their buying experience, or when removing these elements would cause confusion or harm to customers. In all other cases, the standard attribution pattern must be used.</p>
</li>
<li><p>Your app may use App Name Branding in theme extensions only if one or both of the following criteria are met:</p>
<ul>
<li>Customers directly interact with the custom branding elements as a key aspect of their buying experience, such as part of a payment method or loyalty program.</li>
<li>Removing the custom branding elements would cause confusion or harm to customers.</li>
</ul>
</li>
</ul>
<p>App Name Branding includes:</p>
<ul>
<li>Company or app logos, icons, branded watermarks, visual identifiers, or other branded imagery.</li>
<li>Company or app name displayed as text in any form, including plain text, branded fonts, or stylized lettering.</li>
<li>Custom design elements containing the name or logo of the company or app.</li>
</ul>
<p>Standard app attribution: If your app does not meet the criteria above for App Name Branding, you must use the standard app attribution pattern. This pattern is limited to a 24x24 pixel width and height for any image or text.</p>
<p>Regardless of branding, all apps must not:</p>
<ul>
<li>Request app reviews or ratings</li>
<li>Promote other apps or services</li>
</ul>
<p>You can find this revised requirement in <a href="https://shopify.dev/docs/apps/launch/app-requirements-checklist#a-online-store" target="_blank" class="body-link">the online store section of the checklist of requirements page</a>.</p>
</div> ]]></description>
    <pubDate>Thu, 23 Oct 2025 21:00:00 +0000</pubDate>
    <atom:published>2025-10-23T21:00:00.000Z</atom:published>
    <atom:updated>2025-10-23T21:00:00.000Z</atom:updated>
    <category>App store</category>
    <category>Update</category>
    <link>https://shopify.dev/changelog/updated-online-store-promotion-app-store-requirement</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/updated-online-store-promotion-app-store-requirement</guid>
  </item>
  <item>
    <title>New `notify` parameter available on the `storeCreditAccountCredit` mutation</title>
    <description><![CDATA[ <div class=""><p>The <code>storeCreditAccountCredit</code> mutation now includes an optional <code>notify</code> parameter.</p>
<ul>
<li><p>When this parameter is set to <code>true</code>, the account owner will receive a &quot;store credit issued&quot; email notification. If the parameter is not provided, no email will be sent. To enable email notifications, you must explicitly set this flag to <code>true</code>.</p>
</li>
<li><p>For store credit accounts owned by a <code>Customer</code>, the email will be sent to the customer's <a href="https://shopify.dev/docs/api/admin-graphql/latest/objects/customer#field-Customer.fields.defaultEmailAddress" target="_blank" class="body-link">default email address</a>.</p>
</li>
<li><p>For store credit accounts owned by a <code>CompanyLocation</code>, each customer associated as a <a href="https://shopify.dev/docs/api/admin-graphql/latest/objects/CompanyContact" target="_blank" class="body-link">CompanyContact</a> for that company location will receive an email at their respective <a href="https://shopify.dev/docs/api/admin-graphql/latest/objects/customer#field-Customer.fields.defaultEmailAddress" target="_blank" class="body-link">default email address</a>.</p>
</li>
</ul>
<p>For more details refer to the <code>storeCreditAccountCredit</code> mutation in the <a href="https://shopify.dev/docs/api/admin-graphql/latest/mutations/storecreditaccountcredit" target="_blank" class="body-link">developer documentation</a>.</p>
</div> ]]></description>
    <pubDate>Thu, 23 Oct 2025 16:00:00 +0000</pubDate>
    <atom:published>2025-10-23T16:00:00.000Z</atom:published>
    <atom:updated>2025-10-24T10:19:11.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <category>Admin GraphQL API</category>
    <category>2026-01</category>
    <link>https://shopify.dev/changelog/store-credit-notify-flag</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/store-credit-notify-flag</guid>
  </item>
  <item>
    <title>Improved concurrency handling in the Cart AJAX API and Storefront Cart GraphQL API</title>
    <description><![CDATA[ <div class=""><p>As of October 10, 2025, the  Cart AJAX API and Storefront Cart GQL API now processes simultaneous requests. For example, when sending two cart <code>add</code> requests at the same time, the Cart AJAX API executes both requests. </p>
<p>Previously, the Cart AJAX and GraphQL APIs were inconsistent in handling concurrent requests. This sometimes resulted in requests being dropped.</p>
<p>This is considered a bug fix for both APIs, but may require updates if the theme or storefront is unintentionally sending duplicate requests.</p>
<p><strong>Note</strong>: If too many simultaneous requests are receieved, the Cart AJAX API will instead return an HTTP 409 response, while the Storefront Cart GraphQL API will return an error with code &quot;CONFLICT&quot; and message &quot;Could not complete cart operation. The cart conflicted with another request&quot;. </p>
</div> ]]></description>
    <pubDate>Tue, 21 Oct 2025 22:00:00 +0000</pubDate>
    <atom:published>2025-10-21T22:00:00.000Z</atom:published>
    <atom:updated>2025-10-22T13:21:49.000Z</atom:updated>
    <category>API</category>
    <category>Update</category>
    <category>Storefront API</category>
    <link>https://shopify.dev/changelog/improved-concurrency-handling-in-the-cart-ajax-api-and-storefront-cart-graphql-api</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/improved-concurrency-handling-in-the-cart-ajax-api-and-storefront-cart-graphql-api</guid>
  </item>
  <item>
    <title>New: Unlisted Product Status</title>
    <description><![CDATA[ <div class=""><p><code>UNLISTED</code> is available as a new product status value in the 2025-10 GraphQL Admin API and REST Admin APIs, as well as in the Webhooks API. </p>
<p>The <code>Unlisted</code> status hides products from store search and recommendations (including collections), all sales channels,  internet searches and <a href="https://help.shopify.com/en/manual/promoting-marketing/seo/shopify-catalog" target="_blank" class="body-link">Shopify Catalog</a>, while still allowing access via a direct URL. It will be returned in Storefront API and Liquid only when referenced individually by handle, id, or metafield reference.</p>
<p><strong>Note</strong>: Previous versions of the Admin APIs will return product status for unlisted products as <code>ACTIVE</code>.</p>
<p>Learn more about this update in our <a href="https://shopify.dev/docs/api/admin-graphql/2025-10/enums/ProductStatus#enums-UNLISTED" target="_blank" class="body-link">developer documentation</a>.</p>
</div> ]]></description>
    <pubDate>Tue, 21 Oct 2025 16:15:00 +0000</pubDate>
    <atom:published>2025-10-21T16:15:00.000Z</atom:published>
    <atom:updated>2025-11-12T21:24:03.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <category>Admin GraphQL API</category>
    <category>Admin REST API</category>
    <category>Events &amp; webhooks</category>
    <category>Liquid</category>
    <category>Storefront API</category>
    <link>https://shopify.dev/changelog/new-unlisted-product-status</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/new-unlisted-product-status</guid>
  </item>
  <item>
    <title>POS UI extensions: Developer experience Improvements</title>
    <description><![CDATA[ <div class=""><p>We’ve released a major update to POS UI extensions, aimed at reducing friction and speeding up your workflow. </p>
<p>Key improvements include:</p>
<ul>
<li><strong>Hot reloading improvements:</strong> We've made hot reloading faster and smoother. Code changes appear on your POS test device instantly without flickering. This update also supports reloading entire navigation screens, so you no longer need to exit and re-enter a screen to see your changes.  </li>
<li><strong>POS dev console:</strong> When you scan your deeplink, you are immediately directed to the POS dev console where you view your app and extension information. The console offers easy access to targets and configurations, centralizing everything you need to efficiently build your extension.  </li>
<li><strong>Quick target previews:</strong> With the new &quot;Preview&quot; feature in the dev console, you can instantly jump to the correct screen in the POS app where your extension is rendered.  </li>
<li><strong>Build error reporting:</strong> If your extension code triggers an error, you’ll now see an error UI directly on the POS device. Tapping the broken component opens the dev console with information about the extension and the error.  </li>
<li><strong>App persistence:</strong> You can configure your extension to automatically reconnect after a POS restart, removing the need to deep link repeatedly.  </li>
<li><strong>In-app reset:</strong> You can remove your extension without restarting the POS or your dev server, making it easy to test new deep links quickly.</li>
</ul>
<p>Ready to get started? All you need is POS v10.13+ and Shopify CLI v3.85+. Find everything you need in our <a href="https://shopify.dev/docs/api/pos-ui-extensions/latest/getting-started#step-4-leverage-developer-tools-to-troubleshoot-and-refine" target="_blank" class="body-link">documentation</a>.</p>
<p>We're excited to hear how this improves your workflow! Let us know what you think in our <a href="https://community.shopify.dev/tag/pos-extensions" target="_blank" class="body-link">developer community</a>.</p>
</div> ]]></description>
    <pubDate>Wed, 15 Oct 2025 16:00:00 +0000</pubDate>
    <atom:published>2025-10-15T16:00:00.000Z</atom:published>
    <atom:updated>2025-10-15T21:26:25.000Z</atom:updated>
    <category>API</category>
    <category>Update</category>
    <category>POS Extensions</category>
    <link>https://shopify.dev/changelog/pos-ui-extensions-developer-experience-improvements</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/pos-ui-extensions-developer-experience-improvements</guid>
  </item>
  <item>
    <title>The product variant limit is now 2048 for all merchants</title>
    <description><![CDATA[ <div class=""><p>It is now possible for all Shopify merchants to create products with up to 2,048 variants in Shopify, exceeding our historical variant limit of 100.</p>
<p>Please note that merchants using apps that are not using the in-support GraphQL product APIs may have a downgraded or broken experience when creating or viewing products with more than 100 variants. </p>
<p>Learn more about 2048 variants, including information on migrating from REST product APIs to the in-support GraphQL product APIs, in our <a href="https://shopify.dev/docs/apps/build/graphql/migrate/new-product-model" target="_blank" class="body-link">developer docs</a>.</p>
</div> ]]></description>
    <pubDate>Wed, 15 Oct 2025 13:30:00 +0000</pubDate>
    <atom:published>2025-10-15T13:30:00.000Z</atom:published>
    <atom:updated>2025-10-15T13:30:00.000Z</atom:updated>
    <category>API</category>
    <category>Update</category>
    <category>Admin REST API</category>
    <category>Storefront API</category>
    <link>https://shopify.dev/changelog/the-product-variant-limit-is-now-2048-for-all-merchants</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/the-product-variant-limit-is-now-2048-for-all-merchants</guid>
  </item>
  <item>
    <title>Subscription Selling Plan support with POS UI Extensions</title>
    <description><![CDATA[ <div class=""><p><a href="https://shopify.dev/docs/api/pos-ui-extensions/2025-10-rc" target="_blank" class="body-link">POS UI Extensions 2025-10</a> introduces API updates for subscription selling plans support within Shopify POS.</p>
<h3>New Cart API Methods</h3>
<h4>Adding Selling Plans</h4>
<p>To add a selling plan to a line item in the cart, use the following method:</p>
<pre><code class="language-ts">shopify.cart.addLineItemSellingPlan({
  lineItemUuid: 'line-item-uuid',
  sellingPlanId: 123456,
  sellingPlanName: 'Monthly Subscription - 10% off'
});
</code></pre>
<h4>Removing Selling Plans</h4>
<p>To remove a selling plan from a line item, use this method:</p>
<pre><code class="language-ts">shopify.cart.removeLineItemSellingPlan('line-item-uuid');
</code></pre>
<h4>API References</h4>
<p>For detailed information on these methods, refer to the following documentation:</p>
<ul>
<li><a href="https://shopify.dev/docs/api/pos-ui-extensions/2025-10-rc/apis/cart-api#cartapi-propertydetail-addlineitemsellingplan" target="_blank" class="body-link">addLineItemSellingPlan</a></li>
<li><a href="https://shopify.dev/docs/api/pos-ui-extensions/2025-10-rc/apis/cart-api#cartapi-propertydetail-removelineitemsellingplan" target="_blank" class="body-link">removeLineItemSellingPlan</a></li>
</ul>
<h3>Enhanced Line Item Interface</h3>
<p>The <code>LineItem</code> interface has been enhanced to support selling plans:</p>
<pre><code class="language-ts">interface LineItem {
  uuid: string;
  productId: number;
  requiresSellingPlan?: boolean;  // Indicates if a product must have a selling plan
  hasSellingPlanGroups?: boolean; // Indicates if a product has available selling plans
  sellingPlan?: SellingPlan;      // The currently applied selling plan
}
</code></pre>
<h3>Version Requirements</h3>
<p><strong>⚠️ Critical Compatibility Note</strong></p>
<p>To utilize these features, ensure you are using:</p>
<ul>
<li><strong>POS UI Extension 2025-10</strong> or later</li>
<li><strong>Shopify POS 10.13+</strong></li>
</ul>
<p>Attempting to use selling plan APIs or fields in older versions will result in blocked checkouts. Ensure your system is updated to avoid disruptions.</p>
</div> ]]></description>
    <pubDate>Tue, 14 Oct 2025 16:00:00 +0000</pubDate>
    <atom:published>2025-10-14T16:00:00.000Z</atom:published>
    <atom:updated>2025-10-14T16:00:00.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <category>POS Extensions</category>
    <link>https://shopify.dev/changelog/subscription-selling-plan-support-with-pos-ui-extensions</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/subscription-selling-plan-support-with-pos-ui-extensions</guid>
  </item>
  <item>
    <title>Introducing the Shop Minis SDK (early access)</title>
    <description><![CDATA[ <div class=""><p>Shop Minis offer immersive, full-screen buyer experiences within the Shop app. These experiences are built using familiar web technologies, leveraging our React SDK to streamline development. The Shop Minis SDK is now available for early access, enabling you to build and launch your Minis quickly and efficiently.</p>
<p>To create a new Mini, run the following command in your terminal. This will set up a new project with the latest version of the Shop Minis SDK:</p>
<p><code>npm init @shopify/shop-mini@latest</code></p>
<p>For more information on the SDK and available development commands, visit our documentation: <a href="https://shopify.dev/docs/api/shop-minis" target="_blank" class="body-link">Shop Minis API Documentation</a></p>
</div> ]]></description>
    <pubDate>Tue, 14 Oct 2025 15:00:00 +0000</pubDate>
    <atom:published>2025-10-14T15:00:00.000Z</atom:published>
    <atom:updated>2025-10-14T15:00:00.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <link>https://shopify.dev/changelog/introducing-the-shop-minis-sdk-early-access</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/introducing-the-shop-minis-sdk-early-access</guid>
  </item>
  <item>
    <title>Fulfillment service callback url is now optional</title>
    <description><![CDATA[ <div class=""><p>As of the Admin API version 2026-01, the <code>callbackUrl</code> argument in the <a href="https://shopify.dev/docs/api/admin-graphql/2026-01/mutations/fulfillmentServiceCreate" target="_blank" class="body-link">fulfillmentServiceCreate</a> and <a href="https://shopify.dev/docs/api/admin-graphql/2026-01/mutations/fulfillmentServiceUpdate" target="_blank" class="body-link">fulfillmentServiceUpdate</a> mutations is now optional.</p>
<p>If your app's fulfillment services do not have a callback URL but have either <code>inventoryManagement</code> or <code>trackingSupport</code> enabled, they will need to submit the information required by these features via the API.</p>
<ul>
<li>For submitting tracking information and handling fulfillment requests, refer to our documentation on <a href="https://shopify.dev/docs/apps/build/orders-fulfillment/fulfillment-service-apps/build-for-fulfillment-services" target="_blank" class="body-link">building for Fulfillment Services</a>.</li>
<li>For managing inventory quantities, see our documentation on <a href="https://shopify.dev/docs/apps/build/orders-fulfillment/inventory-management-apps/manage-quantities-states" target="_blank" class="body-link">managing Inventory Quantities and States</a>.</li>
</ul>
<h3>How will this change affect my app?</h3>
<p>This is a <em>non-breaking</em> change. If your app currently provides a <code>callbackUrl</code>, it will continue to function as before. You now have the option to create or update services without a <code>callbackUrl</code>.</p>
<h3>What do I need to do?</h3>
<p>No action is required for existing apps.</p>
<p>For new apps, you can omit the <code>callbackUrl</code> argument when <a href="https://shopify.dev/docs/api/admin-graphql/2026-01/mutations/fulfillmentServiceCreate" target="_blank" class="body-link">creating</a> or <a href="https://shopify.dev/docs/api/admin-graphql/2026-01/mutations/fulfillmentServiceUpdate" target="_blank" class="body-link">updating</a> fulfillment services if your operations do not depend on these callbacks.</p>
</div> ]]></description>
    <pubDate>Mon, 13 Oct 2025 15:00:00 +0000</pubDate>
    <atom:published>2025-10-13T15:00:00.000Z</atom:published>
    <atom:updated>2025-10-13T15:00:00.000Z</atom:updated>
    <category>API</category>
    <category>Update</category>
    <category>Admin GraphQL API</category>
    <category>2026-01</category>
    <link>https://shopify.dev/changelog/fulfillment-service-callback-url-is-now-optional</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/fulfillment-service-callback-url-is-now-optional</guid>
  </item>
  <item>
    <title>Integrate accelerated checkout buttons (Shop Pay and Apple Pay) on mobile app storefronts</title>
    <description><![CDATA[ <div class=""><p>Add Shop Pay and Apple Pay checkout buttons to product and cart pages using Checkout Kit for <a href="https://shopify.dev/docs/storefronts/mobile/checkout-kit/accelerated-checkouts" target="_blank" class="body-link">Swift</a> or <a href="https://shopify.dev/docs/storefronts/mobile/checkout-kit/accelerated-checkouts-react-native" target="_blank" class="body-link">React Native</a>. Give customers the quick payment options they expect, with just a few lines of code.</p>
</div> ]]></description>
    <pubDate>Wed, 08 Oct 2025 19:03:00 +0000</pubDate>
    <atom:published>2025-10-08T19:03:00.000Z</atom:published>
    <atom:updated>2025-10-08T19:15:42.000Z</atom:updated>
    <category>Tools</category>
    <category>New</category>
    <link>https://shopify.dev/changelog/integrate-accelerated-checkout-buttons-shop-pay-and-apple-pay-on-mobile-app-storefronts</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/integrate-accelerated-checkout-buttons-shop-pay-and-apple-pay-on-mobile-app-storefronts</guid>
  </item>
  <item>
    <title>Deprecate delivery legacy modes fields</title>
    <description><![CDATA[ <div class=""><p>Support for legacy mode profiles in shipping has been discontinued. This feature has been disabled for a while, and the the GraphQL Admin API is being updated to reflect this.</p>
<p>The following fields are being marked as deprecated:</p>
<ul>
<li><a href="https://shopify.dev/docs/api/admin-graphql/2026-04/objects/deliveryprofile#field-DeliveryProfile.fields.legacyMode" target="_blank" class="body-link"><code>DeliveryProfile.legacyMode</code></a></li>
</ul>
<p>The following fields are effectively deprecated, as they are no longer functional:</p>
<ul>
<li><a href="https://shopify.dev/docs/api/admin-graphql/2026-04/objects/DeliverySetting#field-DeliverySetting.fields.legacyModeBlocked" target="_blank" class="body-link"><code>DeliverySetting.legacyModeBlocked</code></a></li>
<li><a href="https://shopify.dev/docs/api/admin-graphql/2026-04/objects/DeliverySetting#field-DeliverySetting.fields.legacyModeProfiles" target="_blank" class="body-link"><code>DeliverySetting.legacyModeProfiles</code></a></li>
<li><a href="https://shopify.dev/docs/api/admin-graphql/2026-04/input-objects/deliverysettinginput#fields-legacyModeProfiles" target="_blank" class="body-link"><code>DeliverySettingInput.legacyModeProfiles</code></a></li>
</ul>
<p><strong>Note</strong>: These three fields can't be marked as deprecated because that would leave their objects with zero public fields, which is known to cause problems for schema generation.</p>
<p>The corresponding queries that use these fields now return static data that users should ignore. Any mutations that pass these fields are now be no-ops.</p>
</div> ]]></description>
    <pubDate>Wed, 08 Oct 2025 16:00:00 +0000</pubDate>
    <atom:published>2025-10-08T16:00:00.000Z</atom:published>
    <atom:updated>2026-01-09T01:16:05.000Z</atom:updated>
    <category>API</category>
    <category>Deprecation announcement</category>
    <category>Admin GraphQL API</category>
    <category>2026-04</category>
    <link>https://shopify.dev/changelog/deprecate-delivery-legacy-modes-fields</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/deprecate-delivery-legacy-modes-fields</guid>
  </item>
  <item>
    <title>Themes now use one industry tag for better search results</title>
    <description><![CDATA[ <div class=""><p>The Theme Store has simplified its categorization process by assigning only one industry tag per theme, effective immediately. As a result, all secondary industry tags have been automatically removed.</p>
<p>Your theme's primary industry tag now serves as its sole industry classification. Choose the industry that best matches:</p>
<ul>
<li>The main product types showcased in your demo store</li>
<li>Your intended target merchant audience</li>
</ul>
<p>This will make it easier for merchants to browse and find themes tailored to their specific industry needs. </p>
<p>You can review your current primary industry tag in the Partner Dashboard.</p>
</div> ]]></description>
    <pubDate>Fri, 03 Oct 2025 12:00:00 +0000</pubDate>
    <atom:published>2025-10-03T12:00:00.000Z</atom:published>
    <atom:updated>2025-10-03T12:00:00.000Z</atom:updated>
    <category>Shopify Theme Store</category>
    <category>Update</category>
    <link>https://shopify.dev/changelog/themes-now-use-one-industry-tag-for-better-search-results</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/themes-now-use-one-industry-tag-for-better-search-results</guid>
  </item>
  <item>
    <title>Shopify.dev MCP Now Supports More APIs</title>
    <description><![CDATA[ <div class=""><p>The Shopify.dev MCP server now supports code generation for a range of powerful APIs, enhancing your development experience:</p>
<ul>
<li><a href="https://shopify.dev/docs/api/storefront" target="_blank" class="body-link">Storefront API</a></li>
<li><a href="https://shopify.dev/docs/api/partner" target="_blank" class="body-link">Partner API</a></li>
<li><a href="https://shopify.dev/docs/api/customer" target="_blank" class="body-link">Customer Account API</a></li>
<li><a href="https://shopify.dev/docs/api/payments-apps" target="_blank" class="body-link">Payment Apps API</a></li>
<li><a href="https://shopify.dev/docs/api/polaris" target="_blank" class="body-link">Polaris Web Components</a></li>
<li><a href="https://shopify.dev/docs/api/liquid" target="_blank" class="body-link">Liquid</a></li>
</ul>
<p>This update allows you to leverage the Shopify.dev MCP as a virtual pair programmer within your preferred IDE. Generate code snippets, explore API capabilities, and accelerate your development process across the Shopify platform.</p>
<p><strong>Get started:</strong><br>To begin, <a href="https://shopify.dev/docs/apps/build/devmcp#set-up-the-server" target="_blank" class="body-link">configure the Shopify.dev MCP server</a> to integrate it with your development environment and unlock these new capabilities.</p>
</div> ]]></description>
    <pubDate>Wed, 01 Oct 2025 16:00:00 +0000</pubDate>
    <atom:published>2025-10-01T16:00:00.000Z</atom:published>
    <atom:updated>2025-10-02T09:17:00.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <link>https://shopify.dev/changelog/shopifydev-mcp-now-supports-more-apis</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/shopifydev-mcp-now-supports-more-apis</guid>
  </item>
  <item>
    <title>Introducing `functionHandle` for Shopify Functions </title>
    <description><![CDATA[ <div class=""><p>As of the <code>2025-10</code> API version, we’re introducing support for user-defined handles as the identifier for Shopify Functions in GraphQL mutations. Instead of passing a globally unique <code>functionId</code> in mutations that create or manage function owners, you can pass a stable, app-scoped handle that you define in your <code>shopify.extension.toml</code>. All GraphQL mutations that currently accept <code>functionId</code> will accept <code>functionHandle</code>. </p>
<p><strong>Note</strong>: You must provide either 'functionId' or 'functionHandle' for each call, not both. Providing both will result in a user error.</p>
<h3>What this does for you</h3>
<p>Function IDs change with each deployment to a different environment. This forces developers to query for the latest ID before they can create or update a function owner. Handles are stable across environments and scoped to your app, removing the need to query <code>shopifyFunction</code> before creating the function owner.</p>
<h3>No developer action required</h3>
<p>These changes will not break your existing integrations. <code>functionId</code> will continue to work. However, we recommend you update your code to use <code>functionHandle</code> instead:</p>
<ul>
<li>Remove code that queries for <code>functionId</code> at runtime.</li>
<li>Use the <code>functionHandle</code> you define in <code>shopify.extension.toml</code> directly in GraphQL mutations.</li>
</ul>
<p>Formal deprecation and removal timelines for <code>functionId</code> will be announced separately.</p>
<h3>Example Usage</h3>
<ol>
<li>Obtain <code>functionHandle</code> from the function's <code>shopify.extension.toml</code>:</li>
</ol>
<pre><code class="language-toml">   [[extensions]]
   name = &quot;Payment Customization Function&quot;
   handle = &quot;YOUR_FUNCTION_HANDLE&quot; 
	 type = &quot;function&quot;
</code></pre>
<ol start="2">
<li>Create the payment customization using <code>functionHandle</code></li>
</ol>
<pre><code class="language-graphql">    mutation {
      paymentCustomizationCreate(paymentCustomization: {
        title: &quot;Payment Customization Title&quot;,
        enabled: true,
        functionHandle: &quot;YOUR_FUNCTION_HANDLE&quot;,
      }) {
        paymentCustomization {
          id
        }
        userErrors {
          message
        }
      }
    }
</code></pre>
</div> ]]></description>
    <pubDate>Wed, 01 Oct 2025 16:00:00 +0000</pubDate>
    <atom:published>2025-10-01T16:00:00.000Z</atom:published>
    <atom:updated>2026-07-09T22:29:32.000Z</atom:updated>
    <category>API</category>
    <category>Deprecation announcement</category>
    <category>Functions</category>
    <category>2025-10</category>
    <link>https://shopify.dev/changelog/introducing-functionhandle</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/introducing-functionhandle</guid>
  </item>
  <item>
    <title>New: Support for USDC Credit field in Shopify Payments Payout GraphQL</title>
    <description><![CDATA[ <div class=""><p>As of GraphQL Admin API version <strong>2025-10</strong>, <code>ShopifyPaymentsPayoutSummary</code> now includes a <code>usdcRebateCreditAmount</code> field, which provides a total of all USDC rebate credits issued as part of the payout.</p>
<p>For more information about <code>ShopifyPaymentsPayoutSummary</code>, visit the <a href="https://shopify.dev/docs/api/admin-graphql/2025-10/objects/shopifypaymentspayoutsummary" target="_blank" class="body-link">Shopify.dev documentation</a>.</p>
</div> ]]></description>
    <pubDate>Wed, 01 Oct 2025 16:00:00 +0000</pubDate>
    <atom:published>2025-10-01T16:00:00.000Z</atom:published>
    <atom:updated>2025-10-01T16:00:00.000Z</atom:updated>
    <category>API</category>
    <category>Update</category>
    <category>Admin GraphQL API</category>
    <category>2025-10</category>
    <link>https://shopify.dev/changelog/new-support-for-usdc-credit-field-in-shopify-payments-payout-graphql</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/new-support-for-usdc-credit-field-in-shopify-payments-payout-graphql</guid>
  </item>
  <item>
    <title>Storefront API Cart now supports adding Gift Cards</title>
    <description><![CDATA[ <div class=""><p>As of version 2025-10, you can use the GraphQL Storefront API to add gift cards to a cart without replacing gift cards that have already been applied.</p>
<p>After a cart has been created, perform the <a href="https://shopify.dev/docs/api/storefront/2025-10/mutations/cartGiftCardCodesAdd" target="_blank" class="body-link">cartGiftCardCodesAdd</a> mutation to add one or more gift cards to the cart.</p>
</div> ]]></description>
    <pubDate>Wed, 01 Oct 2025 16:00:00 +0000</pubDate>
    <atom:published>2025-10-01T16:00:00.000Z</atom:published>
    <atom:updated>2025-10-01T16:00:00.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <category>Storefront API</category>
    <category>2025-10</category>
    <link>https://shopify.dev/changelog/storefront-api-cart-now-supports-adding-gift-cards</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/storefront-api-cart-now-supports-adding-gift-cards</guid>
  </item>
  <item>
    <title>Shopify Dev MCP now supports Liquid</title>
    <description><![CDATA[ <div class=""><p>The Shopify Dev MCP server can now search for Liquid docs, and validate Liquid to catch common errors before deployment:</p>
<ul>
<li><strong>Liquid Documentation:</strong> Your AI assistant can now search the complete Liquid API reference, which includes all objects, filters, and tags. </li>
<li><strong>Code Validation:</strong> The built-in theme-check integration identifies syntax errors and best practice violations in your generated code, helping you maintain high-quality standards.</li>
</ul>
<p>If you're already using the Shopify Dev MCP server, Liquid support is automatically included in the latest version.</p>
<p>View the <a href="https://shopify.dev/docs/apps/build/devmcp" target="_blank" class="body-link">Shopify Dev MCP server</a> documentation or explore the <a href="https://github.com/Shopify/dev-mcp" target="_blank" class="body-link">source code on GitHub</a> for more details.</p>
</div> ]]></description>
    <pubDate>Wed, 01 Oct 2025 16:00:00 +0000</pubDate>
    <atom:published>2025-10-01T16:00:00.000Z</atom:published>
    <atom:updated>2025-10-22T20:38:51.000Z</atom:updated>
    <category>Tools</category>
    <category>New</category>
    <link>https://shopify.dev/changelog/dev-mcp-now-supports-liquid</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/dev-mcp-now-supports-liquid</guid>
  </item>
  <item>
    <title>Rerouting Fulfillment Orders is now possible via API</title>
    <description><![CDATA[ <div class=""><p>We have introduced the <code>fulfillmentOrdersReroute</code> mutation to the Admin GraphQL API. This mutation allows you to move fulfillment orders to the next best location based on the shop’s delivery strategies. This update ensures that both the API and Admin offer the same capabilities, enhancing consistency and flexibility for developers.</p>
<p>With this mutation, you can optionally specify locations to exclude from the reroute. Alternatively, you can define a set of locations to consider for changing the fulfillment orders’ location.</p>
<pre><code class="language-graphql">mutation {
  fulfillmentOrdersReroute(
    fulfillmentOrderIds: [&quot;gid://shopify/FulfillmentOrder/12345678&quot;],
    excludedLocationIds: [&quot;gid://shopify/Location/456789&quot;]
  ) {
    movedFulfillmentOrders {
      # FulfillmentOrder fields
    }
    userErrors {
      field
      message
    }
  }
}
</code></pre>
<p>For further details on working with the new mutation, please refer to our <a href="https://shopify.dev/docs/api/admin-graphql/unstable/mutations/fulfillmentOrdersReroute" target="_blank" class="body-link">documentation</a>.</p>
</div> ]]></description>
    <pubDate>Wed, 01 Oct 2025 16:00:00 +0000</pubDate>
    <atom:published>2025-10-01T16:00:00.000Z</atom:published>
    <atom:updated>2025-10-01T16:00:00.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <category>Admin GraphQL API</category>
    <category>2025-10</category>
    <link>https://shopify.dev/changelog/rerouting-fulfillment-orders-via-api</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/rerouting-fulfillment-orders-via-api</guid>
  </item>
  <item>
    <title>Subscription contract shipping requirements now sync with product variants</title>
    <description><![CDATA[ <div class=""><p>We've improved how subscription contracts handle shipping requirements to ensure accurate tax calculations, delivery details, and order totals. These changes apply when using the <a href="https://shopify.dev/docs/api/admin-graphql/latest/mutations/subscriptionBillingAttemptCreate" target="_blank" class="body-link"><code>subscriptionBillingAttemptCreate</code></a> mutation.</p>
<h3>What's Changed</h3>
<p><strong>Shipping requirements use latest product information</strong><br>Subscription contracts now dynamically retrieve the &quot;requires shipping&quot; value from the product variant for each contract line. Previously, a static value was stored when the subscription line was added to the contract. This update ensures that shipping requirements are always current when you update your product variants. This change also applies to <a href="https://shopify.dev/docs/api/admin-graphql/latest/objects/SubscriptionDraft#field-SubscriptionDraft.fields.deliveryOptions" target="_blank" class="body-link"><code>SubscriptionDraft.fields.deliveryOptions</code></a>.</p>
<p><strong>Delivery lines added only when necessary</strong><br>If no lines in a subscription contract require shipping, then we no longer add a delivery line to the order. This prevents unnecessary shipping charges and ensures correct tax calculations.</p>
<h3>Impact</h3>
<p>These changes ensure that:</p>
<ul>
<li>Taxes are calculated correctly based on current shipping requirements.</li>
<li>Order totals reflect accurate delivery costs.</li>
<li>Shipping configuration issues are caught before orders are processed.</li>
<li>Subscription contracts stay in sync with your product catalog changes.</li>
</ul>
</div> ]]></description>
    <pubDate>Wed, 01 Oct 2025 16:00:00 +0000</pubDate>
    <atom:published>2025-10-01T16:00:00.000Z</atom:published>
    <atom:updated>2025-10-01T16:00:00.000Z</atom:updated>
    <category>API</category>
    <category>Breaking API Change</category>
    <category>Admin GraphQL API</category>
    <category>2025-10</category>
    <link>https://shopify.dev/changelog/subscription-contract-shipping-requirements-now-sync-with-product-variants</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/subscription-contract-shipping-requirements-now-sync-with-product-variants</guid>
  </item>
  <item>
    <title>`multipassIdentifier` field added to GraphQL Admin API</title>
    <description><![CDATA[ <div class=""><p>We have introduced the <code>multipassIdentifier</code> field to the Admin GraphQL API, achieving feature parity with the REST Admin API. This update ensures that both APIs offer the same capabilities, enhancing consistency and flexibility for developers.</p>
<p>The <code>multipassIdentifier</code> field allows you to assign unique identifiers to customers, facilitating seamless authentication between your external website and Shopify store through the Multipass feature.</p>
<p>You can now utilize this field in both the <code>customerCreate</code> and <code>customerUpdate</code> mutations:</p>
<pre><code class="language-graphql">mutation {
  customerUpdate(input: {
    id: &quot;gid://shopify/Customer/12345678&quot;,
    multipass_identifier: &quot;your-multipass-identifier-value&quot;
  }) {
    customer {
      id
      multipassIdentifier
    }
    userErrors {
      field
      message
    }
  }
}
</code></pre>
<p>For further details on working with customers in the Admin GraphQL API, please refer to our <a href="https://shopify.dev/docs/api/admin-graphql/current/mutations/customerUpdate" target="_blank" class="body-link">Customer documentation</a></p>
</div> ]]></description>
    <pubDate>Wed, 01 Oct 2025 16:00:00 +0000</pubDate>
    <atom:published>2025-10-01T16:00:00.000Z</atom:published>
    <atom:updated>2025-10-01T16:00:00.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <category>Admin GraphQL API</category>
    <category>2025-10</category>
    <link>https://shopify.dev/changelog/multipassidentifier-field-added-to-graphql-admin-api</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/multipassidentifier-field-added-to-graphql-admin-api</guid>
  </item>
  <item>
    <title>Polaris unified web components are now stable</title>
    <description><![CDATA[ <div class=""><p>Polaris web components are now generally available for extensions with version <code>2025-10</code>. This unified toolkit now includes support for POS, Admin, Checkout, and Customer Accounts, and is always up-to-date through Shopify's CDN.</p>
<p>Since early access, we've added 14 new components for App Home, including a new modal experience. Additionally, there are 36 new components for Checkout and Customer Accounts, and a new Point of Sale surface with 31 components.</p>
<p>To get started, <a href="https://shopify.dev/docs/api/polaris" target="_blank" class="body-link">check out the developer documentation</a>, or learn more about the library by reading <a href="https://www.shopify.com/partners/blog/polaris-goes-stable-the-future-of-shopify-app-development-is-here" target="_blank" class="body-link">our blog post</a>.</p>
</div> ]]></description>
    <pubDate>Wed, 01 Oct 2025 15:30:00 +0000</pubDate>
    <atom:published>2025-10-01T15:30:00.000Z</atom:published>
    <atom:updated>2025-10-01T15:30:00.000Z</atom:updated>
    <category>Tools</category>
    <category>New</category>
    <category>2025-10</category>
    <link>https://shopify.dev/changelog/polaris-unified-web-components-are-now-stable</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/polaris-unified-web-components-are-now-stable</guid>
  </item>
  <item>
    <title>New `productNetwork` field on the `Order` object</title>
    <description><![CDATA[ <div class=""><p>We're adding a <code>productNetwork</code> <a href="https://shopify.dev/docs/api/admin-graphql/2026-01/queries/order#returns-Order.fields.productNetwork" target="_blank" class="body-link">Boolean field</a> on the GraphQL Admin API's <code>Order</code> object in version <code>2025-10</code>.  This field indicates whether a customer also purchased items from other stores. </p>
</div> ]]></description>
    <pubDate>Wed, 01 Oct 2025 13:00:00 +0000</pubDate>
    <atom:published>2025-10-01T13:00:00.000Z</atom:published>
    <atom:updated>2025-10-06T21:30:10.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <category>Admin GraphQL API</category>
    <category>2025-10</category>
    <link>https://shopify.dev/changelog/new-productnetwork-field-on-order-object</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/new-productnetwork-field-on-order-object</guid>
  </item>
  <item>
    <title>Dynamic complexity for `productVariantsBulkCreate` and `productVariantsBulkUpdate` mutations</title>
    <description><![CDATA[ <div class=""><p>The <a href="https://shopify.dev/docs/api/admin-graphql/latest/mutations/productVariantsBulkCreate" target="_blank" class="body-link"><code>productVariantsBulkCreate</code></a> and <a href="https://shopify.dev/docs/api/admin-graphql/latest/mutations/productvariantsbulkupdate" target="_blank" class="body-link"><code>productVariantsBulkUpdate</code></a> mutations now use dynamic complexity costing to more accurately reflect the actual computational cost of operations.</p>
<h3>Support for more complex products</h3>
<p>The mutations now support products with up to 2,048 variants for merchants on all plans, a significant increase from the previous limit of 100 variants. This enables apps to manage more complex products, and support merchants with diverse business needs.</p>
<h3>What's changing</h3>
<p>With the release of Dynamic Complexity, the <a href="https://shopify.dev/docs/api/admin-graphql/latest/mutations/productVariantsBulkCreate" target="_blank" class="body-link"><code>productVariantsBulkCreate</code></a> and <a href="https://shopify.dev/docs/api/admin-graphql/latest/mutations/productvariantsbulkupdate" target="_blank" class="body-link"><code>productVariantsBulkUpdate</code></a> mutations will now have a base cost of 10-points, and additional points will be calcuated based on the complexity of the input. </p>
<ul>
<li><strong>Base cost</strong>: 10 points</li>
<li><strong>Per variant</strong>: 0.2 points</li>
<li><strong>Per variant media</strong>: 0.6 points  </li>
<li><strong>Per variant metafield</strong>: 0.4 points</li>
<li><strong>Per product media</strong>: 1.9 points</li>
</ul>
<p>The total complexity is calculated as:</p>
<pre><code>10 +
  (variants × 0.2) +
  (variant_media × 0.6) +
  (variant_metafields × 0.4) +
  (product_media × 1.9)
</code></pre>
<h3>Migration guidance</h3>
<p>For most apps, no changes are required.</p>
<p>For apps working with high-complexity products exceeding the 1000-point single query limit:</p>
<ul>
<li>Consider using <a href="https://shopify.dev/docs/api/usage/bulk-operations/imports" target="_blank" class="body-link">bulk mutations</a> for very large operations.</li>
<li>Split complex operations into separate calls: use the <a href="https://shopify.dev/docs/api/admin-graphql/latest/mutations/productVariantsBulkCreate" target="_blank" class="body-link"><code>productVariantsBulkCreate</code></a> and <a href="https://shopify.dev/docs/api/admin-graphql/latest/mutations/productvariantsbulkupdate" target="_blank" class="body-link"><code>productVariantsBulkUpdate</code></a> mutations for core variant data, then use <a href="https://shopify.dev/docs/api/admin-graphql/latest/mutations/metafieldsSet" target="_blank" class="body-link"><code>metafieldsSet</code></a> and <a href="https://shopify.dev/docs/api/admin-graphql/latest/mutations/fileCreate" target="_blank" class="body-link"><code>fileCreate</code></a> for additional data.</li>
</ul>
</div> ]]></description>
    <pubDate>Wed, 01 Oct 2025 04:00:00 +0000</pubDate>
    <atom:published>2025-10-01T04:00:00.000Z</atom:published>
    <atom:updated>2025-10-01T04:00:00.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <category>Admin GraphQL API</category>
    <link>https://shopify.dev/changelog/dynamic-complexity-for-productvariantsbulkcreate-and-productvariantsbulkupdate-mutations</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/dynamic-complexity-for-productvariantsbulkcreate-and-productvariantsbulkupdate-mutations</guid>
  </item>
  <item>
    <title>`productVariantsBulkCreate` and `productVariantsBulkUpdate` mutations now validate `inventoryQuantities` limits</title>
    <description><![CDATA[ <div class=""><h2>What's changing?</h2>
<p>The <a href="https://shopify.dev/docs/api/admin-graphql/latest/mutations/productVariantsBulkCreate" target="_blank" class="body-link"><code>productVariantsBulkCreate</code></a> and <a href="https://shopify.dev/docs/api/admin-graphql/latest/mutations/productvariantsbulkupdate" target="_blank" class="body-link"><code>productVariantsBulkUpdate</code></a> mutations now enforce validation limits on inventory quantities as part of supporting the increased variant limit from 100 to 2048 variants per product.</p>
<h3>Input Validation Limits</h3>
<p>With the increase in maximum variants per product from 100 to 2048, the mutation now enforces a maximum limit of <strong>50,000 inventory quantities</strong> across all variants in a single mutation. This ensures reliable performance when managing products with many variants across multiple locations.</p>
<h3>Error response example</h3>
<pre><code class="language-json">{
  &quot;data&quot;: {
    &quot;productVariantsBulkCreate&quot;: {
      &quot;userErrors&quot;: [{
        &quot;code&quot;: &quot;INVENTORY_QUANTITIES_LIMIT_EXCEEDED&quot;,
        &quot;field&quot;: [&quot;variants&quot;],
        &quot;message&quot;: &quot;Input contains 51200 inventory quantities, which exceeds the limit of 50000&quot;
      }],
      &quot;product&quot;: null
    }
  }
}
</code></pre>
<h2>Why are we making this change?</h2>
<h3>Support for 2048 Variants</h3>
<ul>
<li><strong>Increased variant limit</strong>: Products can now have up to 2048 variants (previously 100)</li>
<li><strong>Reliable execution</strong>: Ensures consistent performance when managing complex products</li>
</ul>
<h2>Handling Large Inventory Updates</h2>
<p>If you hit the 50,000 inventory quantity limit, you have several options:</p>
<ol>
<li><strong>Batch your operations</strong>: Split large operations into multiple smaller mutations</li>
<li><strong>Use <code>inventorySetQuantities</code></strong>: For updating inventory across many locations, use the <a href="https://shopify.dev/docs/api/admin-graphql/latest/mutations/inventorySetQuantities" target="_blank" class="body-link"><code>inventorySetQuantities</code></a></li>
<li><strong>Use bulk mutations</strong>: For very large datasets, consider using <a href="https://shopify.dev/docs/api/usage/bulk-operations/imports" target="_blank" class="body-link">bulk mutation operations</a></li>
</ol>
<h2>Related Changes</h2>
<ul>
<li><p>These changes are part of supporting the increased limit of 2048 variants per product. This validation complements the <a href="https://shopify.dev/changelog/dynamic-complexity-cost-for-productcreate-and-productupdate-mutations" target="_blank" class="body-link">dynamic complexity calculation</a>, providing both cost optimization and input validation for the <code>productSet</code> mutation to handle complex products efficiently.</p>
</li>
<li><p>The <a href="https://shopify.dev/docs/api/admin-graphql/latest/mutations/productSet" target="_blank" class="body-link"><code>productSet</code></a> mutation now <a href="https://shopify.dev/changelog/productset-limit-for-inventory-quantities" target="_blank" class="body-link">enforces <code>inventoryQuantities</code> limits</a> as well.</p>
</li>
</ul>
</div> ]]></description>
    <pubDate>Wed, 01 Oct 2025 04:00:00 +0000</pubDate>
    <atom:published>2025-10-01T04:00:00.000Z</atom:published>
    <atom:updated>2025-10-01T04:00:00.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <category>Admin GraphQL API</category>
    <category>2025-10</category>
    <link>https://shopify.dev/changelog/inventoryquantities-limit-in-mutations</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/inventoryquantities-limit-in-mutations</guid>
  </item>
  <item>
    <title>Dynamic complexity cost for `productCreate` and `productUpdate` mutations</title>
    <description><![CDATA[ <div class=""><p>The <a href="https://shopify.dev/docs/api/admin-graphql/latest/mutations/productcreate" target="_blank" class="body-link"><code>productCreate</code></a> and <a href="https://shopify.dev/docs/api/admin-graphql/latest/mutations/productUpdate" target="_blank" class="body-link"><code>productUpdate</code></a> mutations now use dynamic complexity costing to more accurately reflect the actual computational cost of operations.</p>
<h3>What's changing</h3>
<p>With the release of Dynamic Complexity, the <a href="https://shopify.dev/docs/api/admin-graphql/latest/mutations/productcreate" target="_blank" class="body-link"><code>productCreate</code></a> and <a href="https://shopify.dev/docs/api/admin-graphql/latest/mutations/productUpdate" target="_blank" class="body-link"><code>productUpdate</code></a> mutations will now have a base cost of 10-points, and additional points will be calcuated based on the complexity of the input. </p>
<ul>
<li><strong>Base cost</strong>: 10 points</li>
<li><strong>Per product metafield</strong>: 0.4 points</li>
<li><strong>Per product media</strong>: 1.9 points</li>
</ul>
<p>The total complexity is calculated as:</p>
<pre><code>10 +
  (product_metafields × 0.4) +
  (product_media × 1.9)
</code></pre>
<h3>Migration guidance</h3>
<p>For most apps, no changes are required.</p>
<p>For apps working with high-complexity products exceeding the 1000-point single query limit:</p>
<ul>
<li>Consider using <a href="https://shopify.dev/docs/api/usage/bulk-operations/imports" target="_blank" class="body-link">bulk mutations</a> for very large operations.</li>
<li>Split complex operations into separate calls: use the <a href="https://shopify.dev/docs/api/admin-graphql/latest/mutations/productcreate" target="_blank" class="body-link"><code>productCreate</code></a> and <a href="https://shopify.dev/docs/api/admin-graphql/latest/mutations/productUpdate" target="_blank" class="body-link"><code>productUpdate</code></a> mutations for core product data, then use <a href="https://shopify.dev/docs/api/admin-graphql/latest/mutations/metafieldsSet" target="_blank" class="body-link"><code>metafieldsSet</code></a> and <a href="https://shopify.dev/docs/api/admin-graphql/latest/mutations/fileCreate" target="_blank" class="body-link"><code>fileCreate</code></a> for additional data.</li>
</ul>
</div> ]]></description>
    <pubDate>Wed, 01 Oct 2025 04:00:00 +0000</pubDate>
    <atom:published>2025-10-01T04:00:00.000Z</atom:published>
    <atom:updated>2025-10-01T04:00:00.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <category>Admin GraphQL API</category>
    <category>2025-10</category>
    <link>https://shopify.dev/changelog/dynamic-complexity-cost-for-productcreate-and-productupdate-mutations</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/dynamic-complexity-cost-for-productcreate-and-productupdate-mutations</guid>
  </item>
  <item>
    <title>`productSet` mutation now validates `inventoryQuantities` limits</title>
    <description><![CDATA[ <div class=""><h2>What's changing?</h2>
<p>The <a href="https://shopify.dev/docs/api/admin-graphql/latest/mutations/productSet" target="_blank" class="body-link"><code>productSet</code></a> mutations now enforces validation limits on inventory quantities as part of supporting the increased variant limit from 100 to 2048 variants per product.</p>
<h3>Input Validation Limits</h3>
<p>With the increase in maximum variants per product from 100 to 2048, the mutation now enforces a maximum limit of <strong>50,000 inventory quantities</strong> across all variants in a single mutation. This ensures reliable performance when managing products with many variants across multiple locations.</p>
<h3>Error response example</h3>
<pre><code class="language-json">{
  &quot;data&quot;: {
    &quot;productSet&quot;: {
      &quot;userErrors&quot;: [{
        &quot;code&quot;: &quot;INVENTORY_QUANTITIES_LIMIT_EXCEEDED&quot;,
        &quot;field&quot;: [&quot;input&quot;, &quot;variants&quot;],
        &quot;message&quot;: &quot;Input contains 51200 inventory quantities, which exceeds the limit of 50000&quot;
      }],
      &quot;product&quot;: null
    }
  }
}
</code></pre>
<h2>Why are we making this change?</h2>
<h3>Support for 2048 Variants</h3>
<ul>
<li><strong>Increased variant limit</strong>: Products can now have up to 2048 variants (previously 100)</li>
<li><strong>Reliable execution</strong>: Ensures consistent performance when managing complex products</li>
</ul>
<h2>Handling Large Inventory Updates</h2>
<p>If you hit the 50,000 inventory quantity limit, you have several options:</p>
<ol>
<li><strong>Batch your operations</strong>: Split large operations into multiple smaller mutations</li>
<li><strong>Use <code>inventorySetQuantities</code></strong>: For updating inventory across many locations, use the <a href="https://shopify.dev/docs/api/admin-graphql/latest/mutations/inventorySetQuantities" target="_blank" class="body-link"><code>inventorySetQuantities</code></a></li>
<li><strong>Use bulk mutations</strong>: For very large datasets, consider using <a href="https://shopify.dev/docs/api/usage/bulk-operations/imports" target="_blank" class="body-link">bulk mutation operations</a></li>
</ol>
<h2>Related Changes</h2>
<ul>
<li><p>These changes are part of supporting the increased limit of 2048 variants per product. This validation complements the <a href="https://shopify.dev/changelog/dynamic-complexity-cost-for-productset-mutation" target="_blank" class="body-link">dynamic complexity calculation</a>, providing both cost optimization and input validation for the <code>productSet</code> mutation to handle complex products efficiently.</p>
</li>
<li><p>The <a href="https://shopify.dev/docs/api/admin-graphql/latest/mutations/productVariantsBulkCreate" target="_blank" class="body-link"><code>productVariantsBulkCreate</code></a> and <a href="https://shopify.dev/docs/api/admin-graphql/latest/mutations/productvariantsbulkupdate" target="_blank" class="body-link"><code>productVariantsBulkUpdate</code></a> mutations now <a href="https://shopify.dev/changelog/inventoryquantities-limit-in-mutations" target="_blank" class="body-link">enforce <code>inventoryQuantities</code> limits</a> as well.</p>
</li>
</ul>
</div> ]]></description>
    <pubDate>Wed, 01 Oct 2025 04:00:00 +0000</pubDate>
    <atom:published>2025-10-01T04:00:00.000Z</atom:published>
    <atom:updated>2025-10-01T04:00:00.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <category>Admin GraphQL API</category>
    <category>2025-10</category>
    <link>https://shopify.dev/changelog/productset-limit-for-inventory-quantities</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/productset-limit-for-inventory-quantities</guid>
  </item>
  <item>
    <title>Dynamic complexity cost for `productSet` mutation</title>
    <description><![CDATA[ <div class=""><p>The <a href="https://shopify.dev/docs/api/admin-graphql/latest/mutations/productSet" target="_blank" class="body-link"><code>productSet</code> mutation</a> mutation now uses dynamic complexity costing that more accurately reflects the actual computational cost of operations.</p>
<h3>What's changing</h3>
<p>Instead of a fixed cost of 50 points for all <code>productSet</code> operations, the mutation now calculates complexity based on the actual work being performed:</p>
<ul>
<li><strong>Base cost</strong>: 10 points</li>
<li><strong>Per variant</strong>: 0.2 points</li>
<li><strong>Per variant file</strong>: 0.6 points  </li>
<li><strong>Per variant metafield</strong>: 0.4 points</li>
<li><strong>Per product metafield</strong>: 0.4 points</li>
<li><strong>Per product file</strong>: 1.9 points</li>
</ul>
<p>The total complexity is calculated as:</p>
<pre><code>10 +
  (variants × 0.2) +
	(variant_files × 0.6) +
	(variant_metafields × 0.4) 
	(product_metafields × 0.4) 
	(product_files × 1.9)
</code></pre>
<h3>Benefits for your apps</h3>
<p><strong>Lower costs for most operations</strong>: More than 99.5% of existing <code>productSet</code> operations will cost less than the previous fixed cost of 50 points. Simple product updates that previously cost 50 points now cost as little as 10-20 points.</p>
<p><strong>Support for larger products</strong>: The mutation now supports products with up to 2,048 variants for merchants on all plans, a significant increase from the previous limit of 100 variants. This enables apps to manage more complex products and support merchants with diverse business needs.</p>
<h3>Examples</h3>
<p><strong>Simple product update</strong> (1 variant, no files or metafields):</p>
<ul>
<li>Previous cost: 50 points</li>
<li>New cost: 10 points (80% reduction)</li>
</ul>
<p><strong>Medium complexity</strong> (20 variants, 5 product metafields):</p>
<ul>
<li>Previous cost: 50 points  </li>
<li>New cost: 16 points (68% reduction)</li>
</ul>
<p><strong>Complex product</strong> (200 variants, 10 files, 20 metafields):</p>
<ul>
<li>Previous cost: 50 points</li>
<li>New cost: 77 points (reflects actual resource usage)</li>
</ul>
<h3>Migration guidance</h3>
<p>For most apps, no changes are required. Your existing <code>productSet</code> operations will automatically benefit from lower complexity costs.</p>
<p>For apps working with high-complexity products exceeding the 1000-point single query limit:</p>
<ul>
<li>Consider using <a href="https://shopify.dev/docs/api/usage/bulk-operations/imports" target="_blank" class="body-link">bulk mutations</a> for very large operations</li>
<li>Split complex operations into separate calls: use <code>productSet</code> for core product data, then use <a href="https://shopify.dev/docs/api/admin-graphql/latest/mutations/metafieldsSet" target="_blank" class="body-link"><code>metafieldsSet</code></a> and <a href="https://shopify.dev/docs/api/admin-graphql/latest/mutations/fileCreate" target="_blank" class="body-link"><code>fileCreate</code></a> for additional data</li>
</ul>
</div> ]]></description>
    <pubDate>Wed, 01 Oct 2025 04:00:00 +0000</pubDate>
    <atom:published>2025-10-01T04:00:00.000Z</atom:published>
    <atom:updated>2025-10-01T04:00:00.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <category>Admin GraphQL API</category>
    <category>2025-10</category>
    <link>https://shopify.dev/changelog/dynamic-complexity-cost-for-productset-mutation</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/dynamic-complexity-cost-for-productset-mutation</guid>
  </item>
  <item>
    <title>ShopifyQL now available as `shopifyqlQuery` within the GraphQL Admin API</title>
    <description><![CDATA[ <div class=""><p>Developers can now leverage ShopifyQL to extract valuable insights from all merchant analytics including sales, customer, and product data via the GraphQL Admin API. This enhancement allows for more sophisticated data analysis and reporting.</p>
<p>For a comprehensive guide on the ShopifyQL language, please visit the <a href="https://help.shopify.com/en/manual/reports-and-analytics/shopify-reports/report-types/shopifyql-editor#shopifyql-syntax" target="_blank" class="body-link">ShopifyQL syntax documentation</a>.</p>
<p>The <code>shopifyqlQuery</code> field is now accessible on the <code>QueryRoot</code> of the GraphQL Admin API. To learn more about using this new query field, refer to our detailed <a href="https://shopify.dev/docs/api/admin-graphql/2025-10/queries/shopifyqlQuery" target="_blank" class="body-link">documentation</a>.</p>
<p>For example, here is a query that demonstrates how to retrieve total sales data, grouped by month, starting from the beginning of the current year: </p>
<pre><code class="language-graphql">{
   shopifyqlQuery(query: &quot;FROM sales SHOW total_sales GROUP BY month SINCE startOfYear(0y) ORDER BY month&quot;) {
    tableData {
      columns {
        name
        dataType
        displayName
      }
      rows
    }
    parseErrors
  }
}
</code></pre>
<p>The response contains table data with column and row values, detailing the total sales per month. </p>
<pre><code class="language-json">{
  &quot;data&quot;: {
    &quot;shopifyqlQuery&quot;: {
      &quot;tableData&quot;: {
        &quot;columns&quot;: [
          {
            &quot;name&quot;: &quot;month&quot;,
            &quot;dataType&quot;: &quot;MONTH_TIMESTAMP&quot;,
            &quot;displayName&quot;: &quot;Month&quot;
          },
          {
            &quot;name&quot;: &quot;total_sales&quot;,
            &quot;dataType&quot;: &quot;MONEY&quot;,
            &quot;displayName&quot;: &quot;Total sales&quot;
          }
        ],
        &quot;rows&quot;: [
          {
            &quot;month&quot;: &quot;2025-01-01&quot;,
            &quot;total_sales&quot;: &quot;5542.954&quot;
          },
          {
            &quot;month&quot;: &quot;2025-02-01&quot;,
            &quot;total_sales&quot;: &quot;1610.094&quot;
          }
        ]
      },
      &quot;parseErrors&quot;: []
    }
  }
}
</code></pre>
<p>Any parsing errors encountered during execution will be listed under <code>parseErrors</code>.</p>
</div> ]]></description>
    <pubDate>Wed, 01 Oct 2025 04:00:00 +0000</pubDate>
    <atom:published>2025-10-01T04:00:00.000Z</atom:published>
    <atom:updated>2025-10-02T14:33:48.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <category>Admin GraphQL API</category>
    <category>2025-10</category>
    <link>https://shopify.dev/changelog/shopifyqlquery-now-available-in-graphql-admin-api</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/shopifyqlquery-now-available-in-graphql-admin-api</guid>
  </item>
  <item>
    <title>Duplicate themes with the Admin GraphQL API</title>
    <description><![CDATA[ <div class=""><p>Starting in version 2025-10, the GraphQL Admin API includes a <code>themeDuplicate</code> mutation to duplicate store themes. The mutation accepts a theme ID and an optional <code>name</code> parameter to rename the duplicated theme.</p>
<p>For further details, refer to the <a href="https://shopify.dev/docs/api/admin-graphql/2025-10/mutations/themeDuplicate" target="_blank" class="body-link"><code>themeDuplicate</code></a> reference documentation.</p>
</div> ]]></description>
    <pubDate>Wed, 01 Oct 2025 03:00:00 +0000</pubDate>
    <atom:published>2025-10-01T03:00:00.000Z</atom:published>
    <atom:updated>2025-10-01T03:00:00.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <category>Admin GraphQL API</category>
    <category>2025-10</category>
    <link>https://shopify.dev/changelog/duplicate-themes-with-the-admin-graphql-api</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/duplicate-themes-with-the-admin-graphql-api</guid>
  </item>
  <item>
    <title>Upcoming Markets pricing support for Draft Order checkouts</title>
    <description><![CDATA[ <div class=""><p>Starting from October 31 2025, when a customer updates their shipping address during a Draft Order checkout, product prices may change based on the shop's <a href="https://help.shopify.com/en/manual/markets-new/catalogs" target="_blank" class="body-link">Markets configuration</a>.</p>
<p>To prevent product pricing from changing in Draft Order checkouts, use the <a href="https://shopify.dev/docs/api/admin-graphql/latest/input-objects/DraftOrderLineItemInput#fields-priceOverride" target="_blank" class="body-link"><code>priceOverride</code></a> or <a href="https://shopify.dev/docs/api/admin-graphql/latest/input-objects/DraftOrderLineItemInput#fields-generatePriceOverride" target="_blank" class="body-link"><code>generatePriceOverride</code></a> input field on the Draft Order line item input when creating or updating a Draft Order.</p>
</div> ]]></description>
    <pubDate>Tue, 30 Sep 2025 16:00:00 +0000</pubDate>
    <atom:published>2025-09-30T16:00:00.000Z</atom:published>
    <atom:updated>2025-09-30T16:00:00.000Z</atom:updated>
    <category>Action Required</category>
    <category>API</category>
    <category>Update</category>
    <category>Admin GraphQL API</category>
    <link>https://shopify.dev/changelog/upcoming-markets-pricing-support-for-draft-order-checkouts</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/upcoming-markets-pricing-support-for-draft-order-checkouts</guid>
  </item>
  <item>
    <title>Introducing the admin intents API</title>
    <description><![CDATA[ <div class=""><p>We're excited to introduce <a href="https://shopify.dev/docs/apps/build/admin/admin-intents" target="_blank" class="body-link">admin intents</a> — a transformative API that enhances app interactions with Shopify's admin interface.</p>
<h2>What are admin intents?</h2>
<p>Admin intents offer a streamlined API designed to integrate effortlessly with:</p>
<ul>
<li>Embedded apps (App Home)</li>
<li>Admin UI extensions</li>
</ul>
<p>With just one API call, your app can now efficiently create or modify a wide range of Shopify core resources, including:</p>
<ul>
<li>Products</li>
<li>Catalogs</li>
<li>Collections</li>
<li>Customers</li>
<li>Markets</li>
<li>Discounts</li>
<li>And more!</li>
</ul>
<p>Dive into the <a href="https://shopify.dev/docs/api/app-home/apis/intents" target="_blank" class="body-link">comprehensive documentation on admin intents</a> to discover how to seamlessly incorporate this powerful API into your app development process.</p>
</div> ]]></description>
    <pubDate>Mon, 29 Sep 2025 13:50:00 +0000</pubDate>
    <atom:published>2025-09-29T13:50:00.000Z</atom:published>
    <atom:updated>2025-09-29T13:50:00.000Z</atom:updated>
    <category>Platform</category>
    <category>New</category>
    <link>https://shopify.dev/changelog/introducing-the-admin-intents-api</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/introducing-the-admin-intents-api</guid>
  </item>
  <item>
    <title>Removal of deprecated `Shop.draftOrders` connection in the GraphQL Admin API</title>
    <description><![CDATA[ <div class=""><p>We are removing the <code>Shop.draftOrders</code> connection, which has already been deprecated for some time. This change is part of our ongoing efforts to streamline and improve the API's efficiency and functionality.</p>
<p><strong>What You Need to Do</strong></p>
<p>To ensure your integrations continue to function smoothly, please update your applications to use the <a href="https://shopify.dev/docs/api/admin-graphql/2025-07/objects/QueryRoot#field-QueryRoot.fields.draftOrders" target="_blank" class="body-link"><code>QueryRoot.draftOrders</code></a> object for retrieving multiple draft orders. If you have any questions or need assistance, please refer to our <a href="https://shopify.dev/docs" target="_blank" class="body-link">developer documentation</a> or reach out to our support team.</p>
</div> ]]></description>
    <pubDate>Fri, 26 Sep 2025 16:00:00 +0000</pubDate>
    <atom:published>2025-09-26T16:00:00.000Z</atom:published>
    <atom:updated>2025-10-06T23:03:02.000Z</atom:updated>
    <category>Action Required</category>
    <category>API</category>
    <category>Breaking API Change</category>
    <category>Admin GraphQL API</category>
    <category>2026-01</category>
    <link>https://shopify.dev/changelog/removal-of-deprecated-shopdraftorders-connection-in-admin-graphql-api</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/removal-of-deprecated-shopdraftorders-connection-in-admin-graphql-api</guid>
  </item>
  <item>
    <title>Built for Shopify grace period extended for uninstall and app embed requirements</title>
    <description><![CDATA[ <div class=""><p>We have extended the grace period for Built for Shopify (BFS) apps that no longer meet specific automated criteria <a href="https://shopify.dev/docs/apps/launch/built-for-shopify/regain-lost-status#criteria" target="_blank" class="body-link">from immediate to 60 days</a>. This extension applies to the following criteria:  </p>
<ul>
<li>Uninstall cleanly using theme app extensions.</li>
<li>Are embedded within the Shopify admin.</li>
</ul>
<p>This change provides you with additional time to resolve any issues without immediately losing your BFS badge. During the 60-day grace period, your app will retain its BFS badge and remain visible to merchants. If the issues are not resolved within this timeframe, the BFS badge will be removed until the problems are addressed.</p>
</div> ]]></description>
    <pubDate>Thu, 25 Sep 2025 15:00:00 +0000</pubDate>
    <atom:published>2025-09-25T15:00:00.000Z</atom:published>
    <atom:updated>2025-09-25T15:14:52.000Z</atom:updated>
    <category>Built for Shopify</category>
    <category>Update</category>
    <link>https://shopify.dev/changelog/built-for-shopify-grace-period-update-for-uninstall-and-app-embed-requirements</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/built-for-shopify-grace-period-update-for-uninstall-and-app-embed-requirements</guid>
  </item>
  <item>
    <title>New metafield definition types in GraphQL - article_reference / list.article_reference</title>
    <description><![CDATA[ <div class=""><p>As of October 2025, Shopify will introduce two new metafield definition types in the Admin GraphQL API, Storefront API, and Liquid. Metafields allow you to customize and store additional information about your Shopify resources, enhancing the flexibility of your online store.</p>
<p>The new metafield definition types are:</p>
<ul>
<li><code>article_reference</code>: This type allows you to reference a specific article on your online store, making it easier to link content dynamically.</li>
<li><code>list.article_reference</code>: This type enables you to create a list of article references, providing a streamlined way to manage multiple content links.</li>
</ul>
<p>To explore these new reference types further, visit the <a href="https://shopify.dev/api/admin-graphql/2025-10/unions/MetafieldReference" target="_blank" class="body-link">Shopify.dev documentation</a>. For practical implementation, check out the <a href="https://shopify.dev/apps/metafields/types" target="_blank" class="body-link">examples provided</a>.</p>
<p>These updates offer enhanced capabilities for managing content on your Shopify store, allowing for more dynamic and customized user experiences.</p>
</div> ]]></description>
    <pubDate>Tue, 23 Sep 2025 16:00:00 +0000</pubDate>
    <atom:published>2025-09-23T16:00:00.000Z</atom:published>
    <atom:updated>2025-09-23T16:00:00.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <category>Admin GraphQL API</category>
    <category>Liquid</category>
    <category>Storefront API</category>
    <category>2025-10</category>
    <link>https://shopify.dev/changelog/new-metafield-definition-types-in-graphql-articlereference-listarticlereference</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/new-metafield-definition-types-in-graphql-articlereference-listarticlereference</guid>
  </item>
  <item>
    <title>Your app may be affected by remote products</title>
    <description><![CDATA[ <div class=""><p>Starting October 9, 2025, products displayed on storefronts may originate from a &quot;remote&quot; source, such as another store. This feature is optional and available to a select group of eligible US-based stores.</p>
<h3>Recommended Updates</h3>
<ul>
<li><p>If your app uses the <a href="https://shopify.dev/docs/api/ajax/reference/cart" target="_blank" class="body-link">Cart Ajax API</a> to determine free shipping qualifications or apply cart discounts, ensure that remote products are excluded from these calculations. Remote products have separate shipping arrangements from their origin stores, and discounts should apply only to products owned by the store.</p>
</li>
<li><p>For apps utilizing the <a href="https://shopify.dev/docs/api/ajax/reference/cart" target="_blank" class="body-link">Cart Ajax API</a> for features like abandoned cart recovery, exclude remote products. The URLs for remote products will expire after a certain period, making recovery attempts unreliable.</p>
</li>
<li><p>For other use cases involving the <a href="https://shopify.dev/docs/api/ajax/reference/cart" target="_blank" class="body-link">Cart Ajax API</a>, evaluate whether your logic should exclude remote products.</p>
</li>
<li><p>Note that remote products are not included in <a href="https://shopify.dev/docs/api/functions/latest#input" target="_blank" class="body-link">Shopify Function inputs</a>, and Shopify Function operations cannot target remote products.</p>
</li>
<li><p>For apps that calculate free shipping thresholds or loyalty points, exclude remote products from your calculations. </p>
</li>
<li><p>For apps that display product page widgets like wishlists, coupon prompts, or store points earning, check if a product is remote and hide these UI elements.</p>
</li>
</ul>
<h3>Identifying Remote Products</h3>
<p>In the <a href="https://shopify.dev/docs/api/ajax/reference/cart" target="_blank" class="body-link">Cart Ajax API</a> response, remote products can be identified by the presence of the attribute <a href="https://shopify.dev/docs/api/ajax/reference/cart#json-of-a-cart-with-remote-products" target="_blank" class="body-link"><code>remote: true</code></a> on cart line items.</p>
<p>Remote products can be distinguished from native products in Liquid by checking if <a href="https://shopify.dev/docs/api/liquid/objects/remote_details" target="_blank" class="body-link"><code>product.remote_details</code></a> is present.</p>
<p>Remote products do not yet appear in <a href="https://shopify.dev/docs/api/storefront/latest/queries/cart" target="_blank" class="body-link">Storefront API</a> responses. Support for identifying these products is coming soon.</p>
</div> ]]></description>
    <pubDate>Sat, 20 Sep 2025 16:00:00 +0000</pubDate>
    <atom:published>2025-09-20T16:00:00.000Z</atom:published>
    <atom:updated>2025-10-28T13:30:23.000Z</atom:updated>
    <category>Action Required</category>
    <category>Tools</category>
    <category>Breaking API Change</category>
    <category>Admin REST API</category>
    <category>Checkout UI</category>
    <category>Functions</category>
    <category>Storefront API</category>
    <link>https://shopify.dev/changelog/your-app-may-be-affected-by-remote-products</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/your-app-may-be-affected-by-remote-products</guid>
  </item>
  <item>
    <title>Improve your theme compatibility with remote products</title>
    <description><![CDATA[ <div class=""><p>Starting October 9, 2025, products displayed on storefronts can originate from a &quot;remote&quot; source, such as another store. This is an opt-in feature available to a select group of eligible US-based merchants.</p>
<ul>
<li>There is no required action from theme developers to support this change, however some app integrations might be affected and therefore we have highlighted some recommendations below.</li>
<li>In collections and search results, remote products will display small badges on their images to indicate their remote origin.</li>
<li>In the cart, remote product titles will include a reference to the seller.</li>
<li>Products with a <a href="https://shopify.dev/docs/api/liquid/objects/remote_details#remote_details-type" target="_blank" class="body-link">remote_details.type</a> of <code>seller</code> will automatically use the <a href="https://shopify.dev/docs/storefronts/themes/architecture/templates/product/seller" target="_blank" class="body-link">Seller product</a> template.</li>
</ul>
<h2>Recommended updates</h2>
<p>The following updates are recommended.</p>
<h3>Seller products</h3>
<p>You can include a Seller product template in your theme using the naming convention <code>product.remote.seller.json</code>. Refer to the <a href="https://shopify.dev/docs/storefronts/themes/architecture/templates/product/seller" target="_blank" class="body-link">related documentation</a> for best practices when designing this template. If a Seller product template is not available, merchants will be prompted to create one; otherwise, the default template will be used as a fallback.</p>
<h3>Cart</h3>
<p>To enhance your theme's compatibility with apps that utilize <a href="https://shopify.dev/docs/api/functions/latest#input" target="_blank" class="body-link">Shopify Function inputs</a> for cart-related functionality, we recommend visually distinguishing remote products from regular products in the cart. Remote products are not included in Shopify Function inputs, and Shopify Function operations cannot target them. Consequently, apps using Shopify Functions for features like cart validation and discounts will not consider remote products in their calculations. This may lead to discrepancies between the cart totals and the calculations returned by these apps.</p>
<p>For example, if an app calculates free shipping for totals above $50, and a customer has $55 worth of merchandise in their cart, with $20 from a remote product, the Functions will only recognize $35 worth of merchandise. As a result, the customer will see that the free shipping threshold has not been met.</p>
<p>To identify and visually group remote products in the cart, use the <a href="https://shopify.dev/docs/api/liquid/objects/remote_details" target="_blank" class="body-link">remote_details</a> on the product:</p>
<pre><code class="language-liquid">&lt;h2&gt;Sold by {{ shop.name }}&lt;/h2&gt;
{% for item in cart.items %}
  {% unless item.product.remote_details %}
    &lt;!-- Items without remote details --&gt;
  {% endunless %}
{% endfor %}

&lt;h2&gt;Sold by other stores&lt;/h2&gt;
{% for item in cart.items %}
  {% if item.product.remote_details %}
    &lt;!-- Items with remote details --&gt;
  {% endif %}
{% endfor %}
</code></pre>
<h2>Related Documentation</h2>
<p>Refer to the following documentation for additional information.</p>
<ul>
<li><a href="https://shopify.dev/docs/api/liquid/objects/remote_product" target="_blank" class="body-link">Liquid <code>remote_product</code> object</a></li>
<li><a href="https://shopify.dev/docs/storefronts/themes/architecture/templates/product/seller" target="_blank" class="body-link">Seller product template</a></li>
<li><a href="https://shopify.dev/docs/storefronts/themes/architecture/templates/cart#remote-products" target="_blank" class="body-link">Remote products in cart</a></li>
<li><a href="https://shopify.dev/docs/storefronts/themes/architecture/templates/collection#remote-products" target="_blank" class="body-link">Remote products in collections</a></li>
<li><a href="https://shopify.dev/docs/storefronts/themes/architecture/templates/search#remote-products" target="_blank" class="body-link">Remote products in search</a></li>
<li><a href="https://shopify.dev/docs/api/ajax/reference/cart#json-of-a-cart-with-remote-products" target="_blank" class="body-link">Cart AJAX API - example of a cart with remote products</a></li>
</ul>
</div> ]]></description>
    <pubDate>Sat, 20 Sep 2025 16:00:00 +0000</pubDate>
    <atom:published>2025-09-20T16:00:00.000Z</atom:published>
    <atom:updated>2025-10-03T11:00:44.000Z</atom:updated>
    <category>Themes</category>
    <category>Update</category>
    <link>https://shopify.dev/changelog/improve-your-theme-compatibility-with-remote-products</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/improve-your-theme-compatibility-with-remote-products</guid>
  </item>
  <item>
    <title>Added support for dispute preventions</title>
    <description><![CDATA[ <div class=""><p>We've introduced a new <code>DisputeStatus</code> value, <code>prevented</code>, and updated the descriptions of all dispute statuses for clarity and consistency.</p>
<h2>What Changed</h2>
<p>You can now receive a <code>prevented</code> status on disputes in the Admin API (both GraphQL and REST) and in any webhooks or payloads that include dispute status. We have refreshed the descriptions of all dispute statuses to better reflect real-world outcomes and processor terminology.</p>
<h2>Who This Is For</h2>
<ul>
<li>App developers and partners who read, store, or display dispute statuses.</li>
<li>Payment and operations tools that report on dispute outcomes.</li>
<li>Agencies building custom workflows around dispute lifecycle events.</li>
</ul>
<h2>Why It Matters</h2>
<ul>
<li>Distinguish cases where a chargeback was stopped upstream (e.g., via Visa Rapid Dispute Resolution) from other outcomes.</li>
<li>Update your UI and reporting to reflect that merchants won’t incur a chargeback fee for prevented disputes.</li>
<li>Gain clearer, more actionable status definitions across the dispute lifecycle.</li>
</ul>
<h2>How It Works</h2>
<p>Processors may send a <code>prevented</code> status when a chargeback is stopped before it’s filed. Currently, Stripe may send <code>prevented</code> for Visa transactions covered by RDR when the merchant is enrolled through a third party.</p>
<p>Shopify doesn’t enroll merchants into dispute prevention services. However, if a merchant is enrolled via a third party and the processor sends <code>prevented</code>, you’ll see it in the Shopify admin.</p>
<h2>Availability</h2>
<ul>
<li>Available now in the Admin API (GraphQL and REST) and in payloads that include dispute status.</li>
<li>This is a non-breaking change; no version pinning is required.</li>
</ul>
<h2>What You Should Do</h2>
<ul>
<li>Review any strict enum handling (switches, validations, database constraints) to ensure <code>prevented</code> is accepted.</li>
<li>Update UI copy, translations, and filters to surface <code>prevented</code> distinctly from open, won, or lost states.</li>
<li>Check analytics and reporting pipelines that group outcomes or calculate fees to ensure <code>prevented</code> is categorized correctly.</li>
<li>Verify that any webhook or event processing that reacts to dispute status changes handles <code>prevented</code> gracefully.</li>
</ul>
<h2>Limitations and Notes</h2>
<ul>
<li>You’ll only see <code>prevented</code> when your payment processor supplies it; availability varies by processor and merchant enrollment.</li>
<li><code>Prevented</code> indicates the dispute didn’t proceed to a chargeback, and merchants won’t be charged a chargeback fee.</li>
</ul>
<h2>Documentation</h2>
<p>For more information, please see the following resources:</p>
<ul>
<li><a href="https://shopify.dev/docs/api/admin-graphql/latest/enums/DisputeStatus" target="_blank" class="body-link">Admin GraphQL DisputeStatus enum</a></li>
<li><a href="https://shopify.dev/docs/api/admin-graphql/latest/objects/shopifypaymentsdispute" target="_blank" class="body-link">Admin GraphQL Dispute object</a></li>
<li><a href="https://shopify.dev/docs/api/admin-rest/latest/resources/dispute" target="_blank" class="body-link">Admin REST disputes</a></li>
</ul>
<h2>Breaking Changes</h2>
<p>None</p>
</div> ]]></description>
    <pubDate>Thu, 18 Sep 2025 16:00:00 +0000</pubDate>
    <atom:published>2025-09-18T16:00:00.000Z</atom:published>
    <atom:updated>2025-09-18T21:23:03.000Z</atom:updated>
    <category>API</category>
    <category>Update</category>
    <category>Admin GraphQL API</category>
    <link>https://shopify.dev/changelog/adds-support-for-dispute-preventions</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/adds-support-for-dispute-preventions</guid>
  </item>
  <item>
    <title>New balance and due status fields for PaymentSchedule</title>
    <description><![CDATA[ <div class=""><p>You can now access more detailed balance information and payment status updates for payment schedules using deferred payments.</p>
<p>We've introduced three new fields to the PaymentSchedule object:</p>
<ul>
<li><strong>balanceDue</strong>: The remaining balance that needs to be captured for this payment schedule.</li>
<li><strong>totalBalance</strong>: The total balance that the customer needs to pay or authorize for this payment schedule.</li>
<li><strong>due</strong>: Indicates whether the payment schedule is currently due (boolean).</li>
</ul>
<p>These fields enhance your ability to monitor payment statuses when developing apps for merchants utilizing payment terms and deferred payment options. With these updates, you can easily differentiate between captured and uncaptured balances and quickly identify which payment schedules require immediate action.</p>
<p>Please note that the existing <code>amount</code> field is now deprecated. We recommend using these new fields for more specific information, or you can refer to <code>Order.totalOutstandingSet</code> for order-level balance details.</p>
</div> ]]></description>
    <pubDate>Wed, 17 Sep 2025 16:00:00 +0000</pubDate>
    <atom:published>2025-09-17T16:00:00.000Z</atom:published>
    <atom:updated>2025-09-17T16:00:00.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <category>Admin GraphQL API</category>
    <category>Customer Account API</category>
    <category>2025-10</category>
    <link>https://shopify.dev/changelog/new-balance-and-due-status-fields-for-paymentschedule</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/new-balance-and-due-status-fields-for-paymentschedule</guid>
  </item>
  <item>
    <title>New `mandate` connection added to `CustomerPaymentMethod` object</title>
    <description><![CDATA[ <div class=""><p>As of API version 2025-10, apps with <a href="https://shopify.dev/docs/api/usage/access-scopes#authenticated-access-scopes" target="_blank" class="body-link"><code>read_customer_payment_methods</code></a> scope can query the new <code>mandate</code> connection on the <a href="https://shopify.dev/docs/api/admin-graphql/latest/objects/CustomerPaymentMethod" target="_blank" class="body-link"><code>CustomerPaymentMethod</code></a> object. </p>
<p>This connection returns what each payment method is authorized for (orders, subscriptions, checkout, etc.) via the <code>resourceType</code> field and the <code>resourceId</code> when applicable.</p>
</div> ]]></description>
    <pubDate>Wed, 17 Sep 2025 16:00:00 +0000</pubDate>
    <atom:published>2025-09-17T16:00:00.000Z</atom:published>
    <atom:updated>2025-09-17T16:00:00.000Z</atom:updated>
    <category>API</category>
    <category>Update</category>
    <category>Admin GraphQL API</category>
    <category>2025-10</category>
    <link>https://shopify.dev/changelog/new-mandate-connection-added-to-customerpaymentmethod-object</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/new-mandate-connection-added-to-customerpaymentmethod-object</guid>
  </item>
  <item>
    <title>App recommendations in Sidekick now available</title>
    <description><![CDATA[ <div class=""><p>App discovery and recommendations are now part of Sidekick, allowing merchants to find, compare, and install apps in chat. Sidekick uses App Store listing content to render standardized app cards, reducing steps to install.</p>
<p>Key features:</p>
<ul>
<li>Up to three relevant app cards for broad queries </li>
<li>A single highlighted app card for <a href="https://shopify.dev/changelog/strongly-matched-apps-will-be-highlighted-in-shopify-app-store-search-results" target="_blank" class="body-link">strongly-matched</a> apps</li>
<li>App‑to‑app comparisons highlight key differences and Built for Shopify status</li>
<li>Install directly from Sidekick</li>
</ul>
<p><a href="https://shopify.dev/changelog/guided-search" target="_blank" class="body-link">Guided search</a> and comparisons in the App Store will soon retire.</p>
<p>To optimize your app's visibility in Sidekick, enable <a href="https://shopify.dev/docs/apps/build/authentication-authorization/app-installation" target="_blank" class="body-link">Shopify-managed installation</a> to streamline your install experience. Also, <a href="https://shopify.dev/docs/apps/launch/app-requirements-checklist#writing-a-shopify-app-store-listing" target="_blank" class="body-link">check your App Store listing</a> for accuracy, clarity, and structure. Achieving the <a href="https://shopify.dev/docs/apps/launch/built-for-shopify" target="_blank" class="body-link">Built for Shopify</a> badge improves search ranking in both the App Store and Sidekick. </p>
</div> ]]></description>
    <pubDate>Wed, 17 Sep 2025 15:30:00 +0000</pubDate>
    <atom:published>2025-09-17T15:30:00.000Z</atom:published>
    <atom:updated>2025-09-17T15:30:00.000Z</atom:updated>
    <category>App store</category>
    <category>New</category>
    <link>https://shopify.dev/changelog/app-recommendations-in-sidekick-now-available</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/app-recommendations-in-sidekick-now-available</guid>
  </item>
  <item>
    <title>Order metafield definitions and values can now be used as filters in the Shopify Admin UI</title>
    <description><![CDATA[ <div class=""><p>Order metafield definitions and values can now be used as filters in the Shopify Admin UI, enhancing the functionality of the order index. This update enables merchants and developers to efficiently manage and organize orders based on specific metafield criteria, streamlining order processing and improving operational efficiency.</p>
<p>Additionally, you can now query order metafield definitions through the Admin GraphQL API using the <a href="https://shopify.dev/docs/api/admin-graphql/2025-01/queries/orders#argument-query-filter-metafields.%7Bnamespace%7D.%7Bkey%7D" target="_blank" class="body-link"><code>metafieldDefinitions</code> query</a>. This feature allows for more precise data retrieval and manipulation, giving developers greater control over order data.</p>
<p>Since orders are already <a href="https://shopify.dev/docs/api/admin-graphql/latest/enums/MetafieldOwnerType" target="_blank" class="body-link">a supported metafield owner type</a>, this change empowers apps and merchants to manage order-level metafield definitions more efficiently. By leveraging these enhancements, users can optimize their workflows and improve the overall management of order-related data.</p>
</div> ]]></description>
    <pubDate>Tue, 16 Sep 2025 15:30:00 +0000</pubDate>
    <atom:published>2025-09-16T15:30:00.000Z</atom:published>
    <atom:updated>2025-09-16T15:33:39.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <category>Admin GraphQL API</category>
    <category>2025-10</category>
    <link>https://shopify.dev/changelog/order-metafield-definitions-and-values-can-now-be-used-as-filters-in-the-shopify-admin-ui</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/order-metafield-definitions-and-values-can-now-be-used-as-filters-in-the-shopify-admin-ui</guid>
  </item>
  <item>
    <title>Enhanced API stability with rate limiting for remote payment method creation</title>
    <description><![CDATA[ <div class=""><p>The <code>customerPaymentMethodRemoteCreate</code> mutation in the Admin API now includes rate limiting to manage excessive API requests and maintain consistent performance for all merchants. This change helps ensure that no single user can overwhelm the system, thereby providing a more reliable experience for everyone.</p>
</div> ]]></description>
    <pubDate>Mon, 15 Sep 2025 16:00:00 +0000</pubDate>
    <atom:published>2025-09-15T16:00:00.000Z</atom:published>
    <atom:updated>2025-09-15T16:00:00.000Z</atom:updated>
    <category>API</category>
    <category>Update</category>
    <category>Admin GraphQL API</category>
    <link>https://shopify.dev/changelog/enhanced-api-stability-with-rate-limiting-for-remote-payment-method-creation</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/enhanced-api-stability-with-rate-limiting-for-remote-payment-method-creation</guid>
  </item>
  <item>
    <title>Store credit now supports company locations as account owners in Admin and Customer APIs</title>
    <description><![CDATA[ <div class=""><p>As of 2025-10, <a href="https://shopify.dev/docs/api/admin-graphql/latest/objects/storeCreditAccount" target="_blank" class="body-link">StoreCreditAccount</a> also support <a href="https://shopify.dev/docs/api/admin-graphql/latest/objects/companylocation" target="_blank" class="body-link">CompanyLocation</a> as owners, enabling location-specific credit management for B2B merchants on the Admin API. </p>
<p>B2B customers <a href="https://shopify.dev/docs/api/customer" target="_blank" class="body-link">authenticated</a> with new customer accounts can view and spend store credit at checkout for company locations they have permission to place orders for. </p>
<p>The Customer Account API now returns the company location's <a href="https://shopify.dev/docs/api/customer/latest/objects/StoreCreditAccount" target="_blank" class="body-link">StoreCreditAccount</a> for authenticated B2B customers.</p>
</div> ]]></description>
    <pubDate>Mon, 15 Sep 2025 16:00:00 +0000</pubDate>
    <atom:published>2025-09-15T16:00:00.000Z</atom:published>
    <atom:updated>2025-09-15T16:00:00.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <category>Admin GraphQL API</category>
    <category>Customer Account API</category>
    <category>2025-10</category>
    <link>https://shopify.dev/changelog/store-credit-now-supports-company-locations-as-account-owners-in-admin-and-customer-apis</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/store-credit-now-supports-company-locations-as-account-owners-in-admin-and-customer-apis</guid>
  </item>
  <item>
    <title>Facebook (Meta) orders support native exchanges</title>
    <description><![CDATA[ <div class=""><p>For Facebook orders created as of August 26, 2025, you can now add <code>exchangeLineItems</code> as an input in the <code>returnCreate</code> <a href="https://shopify.dev/docs/api/admin-graphql/latest/mutations/returnCreate" target="_blank" class="body-link">mutation</a> as you do for other orders, eliminating the need for workarounds when handling exchanges for Facebook orders. </p>
<p>Additionally, Facebook orders also support return fees as of the same date. This change applies to all supported GraphQL API versions. </p>
<p>Exchanges and return fees remain unavailable for Facebook orders placed before this date. </p>
</div> ]]></description>
    <pubDate>Fri, 12 Sep 2025 16:00:00 +0000</pubDate>
    <atom:published>2025-09-12T16:00:00.000Z</atom:published>
    <atom:updated>2025-09-12T16:00:00.000Z</atom:updated>
    <category>API</category>
    <category>Update</category>
    <category>Admin GraphQL API</category>
    <link>https://shopify.dev/changelog/facebook-meta-orders-support-native-exchanges</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/facebook-meta-orders-support-native-exchanges</guid>
  </item>
  <item>
    <title>New enum values for FulfillmentEventStatus</title>
    <description><![CDATA[ <div class=""><p>As of version 2025-10, we are introducing a new value to the <code>FulfillmentEventStatus</code> enum, to enhance your fulfillment tracking capabilities:</p>
<ul>
<li><strong><a href="https://shopify.dev/docs/api/admin-graphql/2025-10/enums/FulfillmentEventStatus#enums-CARRIER_PICKED_UP" target="_blank" class="body-link">CARRIER_PICKED_UP</a>:</strong> This status indicates that the carrier has successfully collected the fulfillment.</li>
</ul>
<p>With this update, you can now track when a shipment has been picked up by the carrier. For more details, please refer to the updated <a href="https://shopify.dev/docs/api/admin-graphql/2025-10/enums/FulfillmentEventStatus#enums-CARRIER_PICKED_UP" target="_blank" class="body-link">Shopify API documentation</a>.</p>
</div> ]]></description>
    <pubDate>Fri, 12 Sep 2025 04:00:00 +0000</pubDate>
    <atom:published>2025-09-12T04:00:00.000Z</atom:published>
    <atom:updated>2025-09-12T04:00:00.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <category>Admin GraphQL API</category>
    <category>2025-10</category>
    <link>https://shopify.dev/changelog/new-carrier-picked-up-fulfillment-status</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/new-carrier-picked-up-fulfillment-status</guid>
  </item>
  <item>
    <title>Metaobject field definitions offer new capabilities</title>
    <description><![CDATA[ <div class=""><h3>What's new</h3>
<p>As of  <code>2025-10</code>, metaobject fields can now be made searchable and filterable in the Shopify admin through the new <code>admin_filterable</code> capability, bringing metaobject fields in line with the existing capability framework used by metafield definitions and enabling merchants to filter metaobject lists by field values and create saved views based on field criteria.</p>
<h3>Implementation</h3>
<ol>
<li><strong>Creating or updating field definitions</strong>: When <a href="https://shopify.dev/docs/api/admin-graphql/latest/mutations/metaobjectDefinitionCreate" target="_blank" class="body-link">creating</a> or <a href="https://shopify.dev/docs/api/admin-graphql/latest/mutations/metaobjectdefinitionupdate" target="_blank" class="body-link">updating</a> metaobject field definitions through the Admin GraphQL API, you can now specify capabilities:</li>
</ol>
<pre><code class="language-graphql">mutation {
  metaobjectDefinitionCreate(definition: {
    name: &quot;Product Metadata&quot;
    type: &quot;product_metadata&quot;
    fieldDefinitions: [
      {
        key: &quot;brand&quot;
        name: &quot;Brand&quot;
        type: &quot;single_line_text_field&quot;
        capabilities: {
          adminFilterable: {
            enabled: true
          }
        }
      }
    ]
  }) {
    metaobjectDefinition {
      id
      fieldDefinitions {
        key
        capabilities {
          adminFilterable {
            enabled
          }
        }
      }
    }
  }
}
</code></pre>
<ol start="2">
<li><strong>Querying capability status</strong>: When <a href="https://shopify.dev/docs/api/admin-graphql/latest/queries/metaobjectDefinition" target="_blank" class="body-link">querying metaobject fields</a>, check the status of the <code>admin_filterable</code> capability:</li>
</ol>
<pre><code class="language-graphql">query {
  metaobjectDefinition(id: &quot;gid://shopify/MetaobjectDefinition/123&quot;) {
    fieldDefinitions {
      key
      name
      capabilities {
        adminFilterable {
          enabled
        }
      }
    }
  }
}
</code></pre>
</div> ]]></description>
    <pubDate>Wed, 10 Sep 2025 14:00:00 +0000</pubDate>
    <atom:published>2025-09-10T14:00:00.000Z</atom:published>
    <atom:updated>2025-09-10T14:00:00.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <category>Admin GraphQL API</category>
    <category>2025-10</category>
    <link>https://shopify.dev/changelog/metaobject-field-capabilities</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/metaobject-field-capabilities</guid>
  </item>
  <item>
    <title>New components available for Polaris in Admin</title>
    <description><![CDATA[ <div class=""><p>We've updated Polaris with eight new unified components now available for Shopify Admin: </p>
<ul>
<li><a href="https://shopify.dev/docs/api/app-home/polaris-web-components/forms/colorfield" target="_blank" class="body-link"><code>ColorField</code></a></li>
<li><a href="https://shopify.dev/docs/api/app-home/polaris-web-components/forms/colorpicker" target="_blank" class="body-link"><code>ColorPicker</code></a></li>
<li><a href="https://shopify.dev/docs/api/app-home/polaris-web-components/overlays/popover" target="_blank" class="body-link"><code>Popover</code></a></li>
<li><a href="https://shopify.dev/docs/api/app-home/polaris-web-components/overlays/tooltip" target="_blank" class="body-link"><code>Tooltip</code></a></li>
<li><a href="https://shopify.dev/docs/api/app-home/polaris-web-components/actions/menu" target="_blank" class="body-link"><code>Menu</code></a></li>
<li><a href="https://shopify.dev/docs/api/app-home/polaris-web-components/titles-and-text/chip" target="_blank" class="body-link"><code>Chip</code></a></li>
<li><a href="https://shopify.dev/docs/api/app-home/polaris-web-components/actions/clickablechip" target="_blank" class="body-link"><code>ClickableChip</code></a></li>
<li><a href="https://shopify.dev/docs/api/app-home/polaris-web-components/forms/dropzone" target="_blank" class="body-link"><code>DropZone</code></a></li>
</ul>
<p>They are already available to you via Shopify's CDN. To get started with these new components, <a href="https://shopify.dev/beta/next-gen-dev-platform/polaris" target="_blank" class="body-link">check out the developer documentation</a>.</p>
</div> ]]></description>
    <pubDate>Wed, 10 Sep 2025 12:00:00 +0000</pubDate>
    <atom:published>2025-09-10T12:00:00.000Z</atom:published>
    <atom:updated>2025-09-10T13:41:07.000Z</atom:updated>
    <category>Polaris</category>
    <category>New</category>
    <category>Admin Extensions</category>
    <category>App Bridge</category>
    <link>https://shopify.dev/changelog/new-components-available-for-polaris-in-admin</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/new-components-available-for-polaris-in-admin</guid>
  </item>
  <item>
    <title>Upgrade to the latest version of Checkout Kit to avoid issues with iOS 26</title>
    <description><![CDATA[ <div class=""><p>Checkout Kit’s preloading feature is not compatible with the upcoming release of iOS 26. This incompatibility will prevent buyers from completing their checkout process within the app. If no action is taken, customers using devices with iOS 26 will encounter blank checkout pages and will be unable to finalize their purchases.</p>
<p>To prevent this issue, promptly update your apps to the latest versions of Checkout Kit. Use the following versions: <a href="https://github.com/Shopify/checkout-sheet-kit-swift/releases/tag/3.3.1" target="_blank" class="body-link">Swift 3.3.1</a>, <a href="https://github.com/Shopify/checkout-sheet-kit-android/releases/tag/3.5.1" target="_blank" class="body-link">Kotlin 3.5.1</a>, and <a href="https://github.com/Shopify/checkout-sheet-kit-react-native/releases/tag/3.3.1" target="_blank" class="body-link">React Native 3.3.1</a>.</p>
<p>For more information, <a href="https://shopify.dev/docs/storefronts/mobile/checkout-kit" target="_blank" class="body-link">learn more</a> about Shopify's Checkout Kit.</p>
</div> ]]></description>
    <pubDate>Tue, 09 Sep 2025 16:00:00 +0000</pubDate>
    <atom:published>2025-09-09T16:00:00.000Z</atom:published>
    <atom:updated>2025-09-09T16:00:00.000Z</atom:updated>
    <category>Action Required</category>
    <category>Tools</category>
    <category>Update</category>
    <link>https://shopify.dev/changelog/upgrade-to-the-latest-version-of-checkout-kit-to-avoid-issues-with-ios-26</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/upgrade-to-the-latest-version-of-checkout-kit-to-avoid-issues-with-ios-26</guid>
  </item>
  <item>
    <title>Setting `permitsSkuSharing` argument to `false` when creating a fulfillment service returns an error</title>
    <description><![CDATA[ <div class=""><p>With the 2025-10 API version, the <code>permitsSkuSharing</code> argument has been updated for both the <code>fulfillmentServiceCreate</code> mutation and the <code>FulfillmentService#create</code> REST endpoint to return an error if a <code>false</code> value is passed in. Non-SKU sharing fulfillment services have been deprecated, and this pushes us in the direction of making all Fulfillment Services Sku sharing enabled. </p>
<p>If your app or service is currently passing in a <code>false</code> value, please update it to send in <code>true</code> instead, or omit this parameter entirely. This change means that any new fulfillment services that are created can share SKUs with other locations and ensures future compatibilty with our systems. </p>
<p><a href="https://shopify.dev/docs/api/admin-graphql/2025-10/mutations/fulfillmentServiceCreate#argument-permitsSkuSharing" target="_blank" class="body-link">GraphQL mutation documentation</a>
<a href="https://shopify.dev/docs/api/admin-rest/2025-10/resources/fulfillmentservice#post-fulfillment-services" target="_blank" class="body-link">REST endpoint documentation</a></p>
</div> ]]></description>
    <pubDate>Fri, 05 Sep 2025 04:00:00 +0000</pubDate>
    <atom:published>2025-09-05T04:00:00.000Z</atom:published>
    <atom:updated>2025-09-05T04:00:00.000Z</atom:updated>
    <category>Action Required</category>
    <category>API</category>
    <category>Breaking API Change</category>
    <category>Admin GraphQL API</category>
    <category>Admin REST API</category>
    <category>2025-10</category>
    <link>https://shopify.dev/changelog/setting-permitsskusharing-argument-to-false-when-creating-a-fulfillment-service-returns-an-error</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/setting-permitsskusharing-argument-to-false-when-creating-a-fulfillment-service-returns-an-error</guid>
  </item>
  <item>
    <title>Next-Gen developer platform now available to all app developers</title>
    <description><![CDATA[ <div class=""><p><strong>What’s new for you:</strong></p>
<ul>
<li><strong>Create developer stores with any plan:</strong> Easily create dev stores on any Shopify plan, including Plus, to align with your target environments.</li>
<li><strong>Build and test without deploying:</strong> Instantly iterate on your app using the new app dev preview. Deploy only when you're ready.</li>
<li><strong>Manage metaobject definitions in code:</strong> Directly define and update your app’s custom data in your TOML files, eliminating the need to manage state via APIs.</li>
<li><strong>Streamline your workflow:</strong> Organize, monitor, and manage your apps in one centralized Dev Dashboard.</li>
</ul>
<p><strong>What’s changing:</strong></p>
<p>We're transitioning all apps and dev stores from the Partner Dashboard to the new Dev Dashboard. Your current installations will continue to function, but management will now occur on the new platform.</p>
<p><strong>Shopify will migrate your partner org's apps over the next week.</strong> If the migrated apps have extensions, you'll need to run <code>shopify app deploy</code> in order for their extensions to be updated.</p>
<p>If you use dashboard-managed extensions, migrate them to the CLI or remove them, as they won't function on the new platform. Post-migration, you can deploy and manage app versions via the CLI or Dev Dashboard.</p>
<p><strong>Why this matters:</strong></p>
<p>This update provides a faster feedback loop, greater control over your data models, and a unified platform for app management. The new platform is designed to support modern app development at scale, allowing you to focus on creating exceptional merchant experiences.</p>
<p><strong>Next steps:</strong></p>
<ul>
<li>Explore the <a href="https://shopify.dev/docs/apps/build/dev-dashboard" target="_blank" class="body-link">documentation</a> for detailed information on the new workflow.</li>
<li>Review and update your extensions as necessary.</li>
<li>Make sure you're on the latest version of Shopify CLI (3.84.1 or newer)</li>
</ul>
<p>If you have questions or need assistance with migration, refer to the documentation or engage with the developer forums.</p>
</div> ]]></description>
    <pubDate>Wed, 03 Sep 2025 16:00:00 +0000</pubDate>
    <atom:published>2025-09-03T16:00:00.000Z</atom:published>
    <atom:updated>2025-09-03T16:05:16.000Z</atom:updated>
    <category>Action Required</category>
    <category>Tools</category>
    <category>New</category>
    <link>https://shopify.dev/changelog/next-gen-dev-platform-ga</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/next-gen-dev-platform-ga</guid>
  </item>
  <item>
    <title>`@inContext` directive supports visitor consent for privacy-compliant checkouts</title>
    <description><![CDATA[ <div class=""><p>The <code>@inContext</code> directive now includes a <code>visitorConsent</code> parameter, allowing developers to pass buyer consent preferences—such as analytics, preferences, marketing, and sale of data—to cart operations. This consent information is automatically encoded into the resulting <a href="/docs/api/storefront/latest/objects/Cart#field-Cart.fields.checkoutUrl" target="_blank" class="body-link"><code>checkoutUrl</code></a>, ensuring privacy compliance throughout the checkout process.</p>
<p>This enhancement allows developers using Checkout Kit and other integrations to seamlessly collect and transmit buyer consent, thereby supporting privacy regulations and maintaining a smooth checkout experience.</p>
<p><strong>Key features:</strong></p>
<ul>
<li>Optional consent fields for analytics, preferences, marketing, and sale of data</li>
<li>Automatic encoding of consent into checkout URL via the <code>_cs</code> parameter</li>
<li>Compatibility with existing cart mutations and queries</li>
</ul>
<p><a href="/docs/api/storefront#directives" target="_blank" class="body-link">Learn more about the <code>@inContext</code> directive and visitor consent →</a></p>
</div> ]]></description>
    <pubDate>Tue, 02 Sep 2025 16:00:00 +0000</pubDate>
    <atom:published>2025-09-02T16:00:00.000Z</atom:published>
    <atom:updated>2025-09-02T16:00:00.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <category>Storefront API</category>
    <category>2025-10</category>
    <link>https://shopify.dev/changelog/incontext-directive-supports-visitor-consent-for-privacy-compliant-checkouts</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/incontext-directive-supports-visitor-consent-for-privacy-compliant-checkouts</guid>
  </item>
  <item>
    <title>Global HS code is now supported  in GraphQL Admin API</title>
    <description><![CDATA[ <div class=""><p>As of <code>2025-10</code>, The <code>countryCode</code> field in <a href="https://shopify.dev/docs/api/admin-graphql/latest/input-objects/CountryHarmonizedSystemCodeInput" target="_blank" class="body-link"><code>CountryHarmonizedSystemCodeInput</code></a> is now nullable. When set to <code>null</code>, the HS code (harmonized system code) entry represents a global HS code rather than a country-specific one.</p>
<p><strong>Why this matters</strong>
Many merchants work with global HS codes (typically 6-digit codes) that apply universally across countries before being extended with country-specific digits. This enhancement allows you to:</p>
<ul>
<li>Store global HS codes without requiring a specific country context</li>
<li>Reduce redundancy when the same base HS code applies across multiple countries</li>
<li>Better align with international trade practices where global codes serve as the foundation</li>
</ul>
<p><strong>Migration</strong>
No action required. This is a non-breaking change:</p>
<ul>
<li>Existing implementations that provide countryCode will continue to work unchanged</li>
<li>You can now optionally pass null for countryCode to create global HS code entries</li>
</ul>
<p><strong>Related resources</strong></p>
<ul>
<li>[Add HS codes and the country or region of origin to your products]<a href="https://help.shopify.com/en/manual/international/duties-and-import-taxes/charging-duties#add-hs-codes" target="_blank" class="body-link">https://help.shopify.com/en/manual/international/duties-and-import-taxes/charging-duties#add-hs-codes</a>)</li>
<li><a href="https://www.wcoomd.org/en/topics/nomenclature/overview/what-is-the-harmonized-system.aspx" target="_blank" class="body-link">International Trade Documentation</a></li>
</ul>
</div> ]]></description>
    <pubDate>Mon, 01 Sep 2025 16:00:00 +0000</pubDate>
    <atom:published>2025-09-01T16:00:00.000Z</atom:published>
    <atom:updated>2025-09-01T16:00:00.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <category>Admin GraphQL API</category>
    <category>2025-10</category>
    <link>https://shopify.dev/changelog/country-hs-codes-global-value</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/country-hs-codes-global-value</guid>
  </item>
  <item>
    <title>CollectionReorderProducts operation userErrors now includes code field</title>
    <description><![CDATA[ <div class=""><p>Starting with version 2025-10, the <code>userErrors</code> GraphQL type in the GraphQL Admin API's <a href="https://shopify.dev/docs/api/admin-graphql/latest/mutations/collectionReorderProducts" target="_blank" class="body-link"><code>collectionReorderProducts</code></a> mutation will be updated to <code>CollectionReorderProductsUserError</code>.</p>
<p>This new type retains all the fields of the previous type and introduces an additional <code>code</code> field.</p>
</div> ]]></description>
    <pubDate>Mon, 01 Sep 2025 16:00:00 +0000</pubDate>
    <atom:published>2025-09-01T16:00:00.000Z</atom:published>
    <atom:updated>2025-09-01T16:00:00.000Z</atom:updated>
    <category>Action Required</category>
    <category>API</category>
    <category>Breaking API Change</category>
    <category>Admin GraphQL API</category>
    <category>2025-10</category>
    <link>https://shopify.dev/changelog/collectionreorderproducts-operation-usererrors-now-includes-code-field</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/collectionreorderproducts-operation-usererrors-now-includes-code-field</guid>
  </item>
  <item>
    <title>Cart mutations now return error for invalid merchandise configuration</title>
    <description><![CDATA[ <div class=""><p>We have enhanced error handling for cart mutations to provide clearer feedback when merchandise cannot be added to or maintained in a cart. The cart API now returns a <code>MERCHANDISE_NOT_APPLICABLE</code> error code for specific merchandise-related issues.</p>
<h3>When This Error Occurs</h3>
<p>The <code>MERCHANDISE_NOT_APPLICABLE</code> error is triggered in the following scenarios:</p>
<p><strong>Inventory &amp; Availability Issues:</strong></p>
<ul>
<li>The item is out of stock or insufficient stock is available for the requested quantity.</li>
<li>The product is not published or is unavailable in the buyer's location.</li>
<li>The inventory record is missing.</li>
<li>The product variant does not exist.</li>
</ul>
<p><strong>Pricing &amp; Configuration Issues:</strong></p>
<ul>
<li>There is a discrepancy between expected and actual prices.</li>
<li>Gift cards have zero or invalid amounts.</li>
<li>Bundle products lack required components.</li>
<li>The cart line item limit is exceeded.</li>
</ul>
<h3>What This Means for Your Integration</h3>
<p>If you receive a <code>MERCHANDISE_NOT_APPLICABLE</code> error:</p>
<ul>
<li>The specified merchandise cannot be added to the cart in its current configuration.</li>
<li>Notify customers about the availability issue.</li>
<li>Refresh product data or adjust quantities as needed.</li>
<li>For bundles, ensure all required components are present.</li>
</ul>
</div> ]]></description>
    <pubDate>Fri, 29 Aug 2025 16:00:00 +0000</pubDate>
    <atom:published>2025-08-29T16:00:00.000Z</atom:published>
    <atom:updated>2025-08-29T16:00:00.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <category>Storefront API</category>
    <category>2025-10</category>
    <link>https://shopify.dev/changelog/storefront-api-cart-now-exposes-invalid-merchandise-configuration-error</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/storefront-api-cart-now-exposes-invalid-merchandise-configuration-error</guid>
  </item>
  <item>
    <title>Build an Announcement Bar Extension for the Thank You page or Customer Account Pages</title>
    <description><![CDATA[ <div class=""><p>We are excited to announce the release of support for building announcement bar extensions on the Thank You page and Customer Account pages, including the Order Status page, Order Index page, and Profile page. The announcement bar is a new UI-extension form factor that uses prominent placement, animation, and colors to capture buyers' attention. With this feature, you can create extensions that highlight a merchant's most important tasks on the page, such as surveys, reviews, and upsells.</p>
<p>You can start building an announcement bar extension now using the 2025-07 version of the Checkout and Customer Accounts UI extension APIs.</p>
<p>For more information on building an announcement bar extension, visit the <a href="https://shopify.dev/docs/apps/build/checkout/thank-you-order-status/ux-for-announcement-bar" target="_blank" class="body-link">Shopify developer documentation</a>.</p>
</div> ]]></description>
    <pubDate>Thu, 28 Aug 2025 20:00:00 +0000</pubDate>
    <atom:published>2025-08-28T20:00:00.000Z</atom:published>
    <atom:updated>2025-08-28T20:00:00.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <category>Checkout UI</category>
    <category>Customer Accounts</category>
    <link>https://shopify.dev/changelog/build-an-announcement-bar-extension-for-the-thank-you-page-or-customer-account-pages</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/build-an-announcement-bar-extension-for-the-thank-you-page-or-customer-account-pages</guid>
  </item>
  <item>
    <title> Enhanced delivery profile webhooks now include additional payload fields</title>
    <description><![CDATA[ <div class=""><h2>Enhanced Delivery Profile Webhooks Now Include Additional Payload Fields</h2>
<p>We've improved the <code>profiles/update</code> webhook by adding more comprehensive payload information. This enhancement significantly increases webhook reliability and reduces unnecessary debouncing.</p>
<h3>What's New</h3>
<p>Previously, <code>profiles/update</code> webhooks only included the profile ID in their payload. This minimal payload led to an issue where multiple rapid updates to the same delivery profile were debounced by our webhook delivery system, meaning only the first update within a 15-minute window would reach your app.</p>
<p>Now, when you subscribe to <code>profiles/update</code> webhooks, you'll receive these additional fields:</p>
<ul>
<li><code>name</code>: The profile's display name</li>
<li><code>default</code>: Indicates if this is the default delivery profile</li>
<li><code>profile_type</code>: The type of delivery profile</li>
<li><code>version</code>: An integer that gets incrementned whenever the profile or its shipping rates are modified</li>
</ul>
<h3>Why This Matters</h3>
<p>If your app responds to delivery profile changes—such as for shipping rate synchronization, fulfillment optimization, or carrier integrations—you can now reliably receive every update. This is especially useful when merchants make quick successive changes to their shipping configurations, such as:</p>
<ul>
<li>Adjusting weight-based rate conditions</li>
<li>Modifying zone configurations</li>
<li>Updating multiple shipping rates in sequence</li>
</ul>
<p>The new <code>version</code> field acts as a fingerprint of the profile's current state. It increments whenever the profile or its associated shipping rates are modified, ensuring each webhook has a unique payload that won't be debounced.</p>
<h3>Using the Enhanced Payload</h3>
<p>The enhanced payload structure is as follows:</p>
<pre><code class="language-json">{
  &quot;id&quot;: 123456789,
  &quot;name&quot;: &quot;Standard Shipping&quot;,
  &quot;default&quot;: false,
  &quot;profile_type&quot;: &quot;shipping&quot;,
  &quot;version&quot;: &quot;1&quot;
}
</code></pre>
<p>This enhancement is available now in API version <code>unstable</code> and will be included in the next stable API release.</p>
</div> ]]></description>
    <pubDate>Mon, 25 Aug 2025 16:00:00 +0000</pubDate>
    <atom:published>2025-08-25T16:00:00.000Z</atom:published>
    <atom:updated>2025-08-25T16:00:00.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <category>Events &amp; webhooks</category>
    <category>2025-10</category>
    <link>https://shopify.dev/changelog/enhanced-delivery-profile-webhooks-now-include-additional-payload-fields</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/enhanced-delivery-profile-webhooks-now-include-additional-payload-fields</guid>
  </item>
  <item>
    <title>New PRESERVE_STANDALONE_VARIANT strategy for the productVariantsBulkCreate mutation</title>
    <description><![CDATA[ <div class=""><p>As of GraphQL API version <code>2025-10</code>, we have introduced a new value, <code>PRESERVE_STANDALONE_VARIANT</code>, to the <a href="https://shopify.dev/docs/api/admin-graphql/latest/enums/ProductVariantsBulkCreateStrategy" target="_blank" class="body-link"><code>ProductVariantsBulkCreateStrategy</code></a>. This value can be used as an optional argument in the <a href="https://shopify.dev/docs/api/admin-graphql/latest/mutations/productVariantsBulkCreate" target="_blank" class="body-link"><code>productVariantsBulkCreate</code></a> mutation.</p>
<p>The <code>PRESERVE_STANDALONE_VARIANT</code> strategy ensures that any existing standalone variant, whether default or custom, is retained when executing the <code>productVariantsBulkCreate</code> mutation.</p>
<p>For more detailed information and examples, please visit our <a href="https://shopify.dev/docs/api/admin-graphql/latest/mutations/productVariantsBulkCreate" target="_blank" class="body-link">productVariantsBulkCreate documentation</a> on Shopify.dev.</p>
</div> ]]></description>
    <pubDate>Thu, 21 Aug 2025 23:00:00 +0000</pubDate>
    <atom:published>2025-08-21T23:00:00.000Z</atom:published>
    <atom:updated>2025-08-21T23:00:00.000Z</atom:updated>
    <category>API</category>
    <category>Update</category>
    <category>Admin GraphQL API</category>
    <category>2025-10</category>
    <link>https://shopify.dev/changelog/new-preservestandalonevariant-strategy-for-productvariantsbulkcreate-mutation</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/new-preservestandalonevariant-strategy-for-productvariantsbulkcreate-mutation</guid>
  </item>
  <item>
    <title>Determine extension status with the new `shopify.app.extensions()` method in App Bridge </title>
    <description><![CDATA[ <div class=""><p>You can now use the <code>shopify.app.extensions()</code> method in App Bridge to identify which of your checkout and customer account extensions are active on a merchant’s store. This feature simplifies tracking setup progress and assists in guiding merchants through onboarding.</p>
<p>With the <code>shopify.app.extensions()</code> method, your embedded app can query its checkout and customer account extensions. For each extension, you’ll receive:</p>
<ul>
<li><code>handle</code>: The extension handle from your TOML file  </li>
<li><code>activations</code>: Lists the targets where each extension is live (e.g., <code>purchase.thank-you.block.render</code>)</li>
</ul>
<p>This data helps you show merchants what’s configured and what requires attention, particularly useful when migrating to the <strong>Thank You</strong> and <strong>Order Status</strong> pages.</p>
<p>This initial release supports only checkout and customer account extensions.</p>
<p>For more information, refer to the <a href="https://shopify.dev/docs/api/app-bridge-library/apis/app" target="_blank" class="body-link">developer documentation</a>.</p>
</div> ]]></description>
    <pubDate>Thu, 21 Aug 2025 16:00:00 +0000</pubDate>
    <atom:published>2025-08-21T16:00:00.000Z</atom:published>
    <atom:updated>2025-08-21T16:26:33.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <category>App Bridge</category>
    <link>https://shopify.dev/changelog/app-bridge-extension-api</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/app-bridge-extension-api</guid>
  </item>
  <item>
    <title>Introducing the new `context` field to specify discount eligibility</title>
    <description><![CDATA[ <div class=""><p>As of API version 2025-10, you can use <code>context</code> to specify whether <a href="https://help.shopify.com/en/manual/discounts/discount-methods/discount-codes" target="_blank" class="body-link">code</a> or <a href="https://help.shopify.com/en/manual/discounts/discount-methods/automatic-discounts" target="_blank" class="body-link">automatic</a> discounts are eligible for all customers, specific customers, or customer segments. </p>
<p>Specifying customer eligibility is a new feature for automatic discounts. For code discounts, <code>context</code> replaces <a href="https://shopify.dev/docs/api/admin-graphql/latest/input-objects/DiscountCustomerSelectionInput" target="_blank" class="body-link"><code>customerSelection</code></a>, which is now marked as deprecated and will be removed in a future version. </p>
<p>API versions older than 2025-10 do not support customer eligibility for automatic discounts. Automatic discounts with customer or customer segment eligibility applied will be filtered out from queries prior to 2025-10.</p>
<p>Learn more about objects used in <a href="https://shopify.dev/docs/api/admin-graphql/2025-10/unions/DiscountContext" target="_blank" class="body-link">queries</a> and <a href="https://shopify.dev/docs/api/admin-graphql/2025-10/input-objects/DiscountContextInput" target="_blank" class="body-link">mutations</a> for discount <code>context</code>.</p>
</div> ]]></description>
    <pubDate>Mon, 18 Aug 2025 20:20:00 +0000</pubDate>
    <atom:published>2025-08-18T20:20:00.000Z</atom:published>
    <atom:updated>2025-08-18T20:20:00.000Z</atom:updated>
    <category>Action Required</category>
    <category>API</category>
    <category>New</category>
    <category>Admin GraphQL API</category>
    <category>2025-10</category>
    <link>https://shopify.dev/changelog/discount-eligibility-management</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/discount-eligibility-management</guid>
  </item>
  <item>
    <title>Font library updates: automatic replacement for deprecated fonts</title>
    <description><![CDATA[ <div class=""><p>As part of our ongoing move towards open source fonts, we're implementing a gradual automatic font replacement. All deprecated fonts used in online store themes, checkout, and the Shopify Forms app will be automatically replaced with fonts of a similar style.</p>
<p>This automatic replacement will happen gradually throughout August 2025. Merchants using deprecated fonts will see their stores updated with replacement fonts that maintain similar visual characteristics to their original selections.</p>
<p>If you're building themes for the Theme Store, you should have already updated your theme presets by the January 3, 2025 deadline. If you haven't yet, review our <a href="https://shopify.dev/docs/storefronts/themes/architecture/settings/fonts#deprecated-fonts" target="_blank" class="body-link">deprecated fonts list</a> and update any affected presets with our recommended replacements or any other available font of your choice.</p>
</div> ]]></description>
    <pubDate>Mon, 18 Aug 2025 16:00:00 +0000</pubDate>
    <atom:published>2025-08-18T16:00:00.000Z</atom:published>
    <atom:updated>2025-08-20T21:07:36.000Z</atom:updated>
    <category>Themes</category>
    <category>Update</category>
    <link>https://shopify.dev/changelog/font-library-updates-automatic-replacement-for-deprecated-fonts</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/font-library-updates-automatic-replacement-for-deprecated-fonts</guid>
  </item>
  <item>
    <title>Order Editing API supports discounts on fulfilled line items</title>
    <description><![CDATA[ <div class=""><p>You can now apply discounts to line items that have already been fulfilled using the order editing API, resulting in more flexible order adjustments. The <a href="https://shopify.dev/docs/api/admin-graphql/latest/mutations/orderEditAddLineItemDiscount" target="_blank" class="body-link"><code>orderEditAddLineItemDiscount</code></a> mutation now supports discount application to both fulfilled and unfulfilled line items.</p>
<p>What this means for you:</p>
<ul>
<li>Clearer transaction history: Discounts on fulfilled items improve post-purchase financial attribution and reporting.</li>
<li>Simplified order management:Orders automatically unarchive when you begin editing and re-archive after issuing refunds, eliminating the need for manual archive management.</li>
</ul>
</div> ]]></description>
    <pubDate>Wed, 13 Aug 2025 16:00:00 +0000</pubDate>
    <atom:published>2025-08-13T16:00:00.000Z</atom:published>
    <atom:updated>2025-08-13T16:00:00.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <category>Admin GraphQL API</category>
    <link>https://shopify.dev/changelog/order-editing-api-supports-discounts-on-fulfilled-line-items</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/order-editing-api-supports-discounts-on-fulfilled-line-items</guid>
  </item>
  <item>
    <title>Deprecation of the checkout_and_accounts_configurations/update webhook</title>
    <description><![CDATA[ <div class=""><p>The <code>checkout_and_accounts_configurations/update</code> webhook, originally introduced in API version 2025-04 to help track updates to checkout and accounts configurations, will be removed on January 1, 2026. </p>
<h3>Action required:</h3>
<p>Apps still subscribed to the <code>checkout_and_accounts_configurations/update</code> webhook should unsubscribe before the removal date.</p>
<p>For tracking <strong>Thank You</strong> and <strong>Order status</strong> page upgrades, we recommend using the Admin API <a href="https://shopify.dev/docs/api/admin-graphql/latest/objects/CheckoutProfile#field-CheckoutProfile.fields.typOspPagesActive" target="_blank" class="body-link">checkoutProfiles</a> query, which includes the <code>typOspPagesActive</code> boolean field to access the same information. This change simplifies the developer experience based on community feedback.</p>
<p>Learn more about working with checkout profiles in the <a href="https://shopify.dev/docs/api/admin-graphql/latest/objects/CheckoutProfile" target="_blank" class="body-link">Shopify developer documentation</a>.</p>
</div> ]]></description>
    <pubDate>Tue, 12 Aug 2025 20:00:00 +0000</pubDate>
    <atom:published>2025-08-12T20:00:00.000Z</atom:published>
    <atom:updated>2025-08-12T20:00:00.000Z</atom:updated>
    <category>Action Required</category>
    <category>API</category>
    <category>Deprecation announcement</category>
    <category>Events &amp; webhooks</category>
    <category>2026-01</category>
    <link>https://shopify.dev/changelog/deprecation-of-checkoutandaccountsconfigurationsupdate-webhook</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/deprecation-of-checkoutandaccountsconfigurationsupdate-webhook</guid>
  </item>
  <item>
    <title>The `cartDeliveryAddressesUpdate` mutation now supports removing all addresses from a cart</title>
    <description><![CDATA[ <div class=""><p>To clear all delivery addresses associated with a cart, you can now call the <a href="https://shopify.dev/docs/api/storefront/latest/mutations/cartDeliveryAddressesUpdate" target="_blank" class="body-link"><code>cartDeliveryAddressesUpdate</code> mutation</a> and set <code>addresses</code> to an empty array(<code>[]</code>). </p>
<p>Previously, to clear a cart’s addresses, you could call the <a href="https://shopify.dev/docs/api/storefront/2025-04/mutations/cartBuyerIdentityUpdate" target="_blank" class="body-link"><code>cartBuyerIdentityUpdate</code> mutation</a> and set <code>buyerIdentity.deliveryAddressPreferences</code> to an empty array. However, <code>deliveryAddressPreferences</code> is deprecated.</p>
<p><strong>Action required before API version 2025-10</strong></p>
<p>Review your existing code. Starting with API version 2025-10, setting the <code>addresses</code> field of the <code>cartDeliveryAddressesUpdate</code> mutation to an empty array (<code>[]</code>) clears cart addresses. If you do not want this behavior, update your code.</p>
</div> ]]></description>
    <pubDate>Fri, 08 Aug 2025 16:00:00 +0000</pubDate>
    <atom:published>2025-08-08T16:00:00.000Z</atom:published>
    <atom:updated>2025-08-13T14:02:31.000Z</atom:updated>
    <category>Action Required</category>
    <category>API</category>
    <category>Breaking API Change</category>
    <category>Storefront API</category>
    <category>2025-10</category>
    <link>https://shopify.dev/changelog/the-cartdeliveryaddressesupdate-mutation-now-supports-removing-all-addresses-from-a-cart</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/the-cartdeliveryaddressesupdate-mutation-now-supports-removing-all-addresses-from-a-cart</guid>
  </item>
  <item>
    <title>`webhookSubscriptionCreate` and `webhookSubscriptionUpdate` support all URI types</title>
    <description><![CDATA[ <div class=""><p>The <a href="https://shopify.dev/docs/api/admin-graphql/2025-10/mutations/webhookSubscriptionCreate" target="_blank" class="body-link"><code>webhookSubscriptionCreate</code></a> and <a href="https://shopify.dev/docs/api/admin-graphql/2025-10/mutations/webhooksubscriptionupdate" target="_blank" class="body-link"><code>webhookSubscriptionUpdate</code></a> GraphQL mutations now support a unified <a href="https://shopify.dev/docs/api/admin-graphql/2025-10/input-objects/WebhookSubscriptionInput#fields-uri" target="_blank" class="body-link"><code>uri</code></a> field in the <a href="https://shopify.dev/docs/api/admin-graphql/2025-10/input-objects/WebhookSubscriptionInput" target="_blank" class="body-link"><code>webhookSubscription</code> (<code>WebhookSubscriptionInput</code>)</a> argument, which accepts:</p>
<ul>
<li>HTTPS URLs</li>
<li>Google Pub/Sub URIs (<code>pubsub://{project-id}:{topic-id}</code>)</li>
<li>Amazon EventBridge event source ARNs</li>
</ul>
<p>The <a href="https://shopify.dev/docs/api/admin-graphql/2025-10/objects/WebhookSubscription" target="_blank" class="body-link"><code>WebhookSubscription</code></a> object has been updated to include this new <a href="https://shopify.dev/docs/api/admin-graphql/2025-10/objects/WebhookSubscription#field-WebhookSubscription.fields.uri" target="_blank" class="body-link"><code>uri</code></a> field, and the <a href="https://shopify.dev/docs/api/admin-graphql/2025-10/queries/webhooksubscriptions" target="_blank" class="body-link"><code>webhookSubscriptions</code></a> query now supports filtering by <a href="https://shopify.dev/docs/api/admin-graphql/2025-10/queries/webhooksubscriptions#arguments-uri" target="_blank" class="body-link"><code>uri</code></a> to accommodate all endpoint types.</p>
<h3>Deprecations</h3>
<p>The following endpoint-specific mutations are now deprecated in favor of the unified approach:</p>
<ul>
<li><a href="https://shopify.dev/docs/api/admin-graphql/2025-10/mutations/eventbridgewebhooksubscriptioncreate" target="_blank" class="body-link"><code>eventBridgeWebhookSubscriptionCreate</code></a></li>
<li><a href="https://shopify.dev/docs/api/admin-graphql/2025-10/mutations/eventbridgewebhooksubscriptionupdate" target="_blank" class="body-link"><code>eventBridgeWebhookSubscriptionUpdate</code></a></li>
<li><a href="https://shopify.dev/docs/api/admin-graphql/2025-10/mutations/pubsubwebhooksubscriptioncreate" target="_blank" class="body-link"><code>pubSubWebhookSubscriptionCreate</code></a></li>
<li><a href="https://shopify.dev/docs/api/admin-graphql/2025-10/mutations/pubsubwebhooksubscriptionupdate" target="_blank" class="body-link"><code>pubSubWebhookSubscriptionUpdate</code></a></li>
</ul>
<p>Additionally, the <a href="https://shopify.dev/docs/api/admin-graphql/2025-10/queries/webhooksubscriptions#arguments-callbackUrl" target="_blank" class="body-link"><code>callbackUrl</code></a> field in the <a href="https://shopify.dev/docs/api/admin-graphql/2025-10/queries/webhooksubscriptions" target="_blank" class="body-link"><code>webhookSubscriptions</code></a> query is deprecated (previously supported HTTPS URLs only).</p>
<h3>Migration Notes</h3>
<p>Use the new <code>uri</code> field in <a href="https://shopify.dev/docs/api/admin-graphql/2025-10/mutations/webhookSubscriptionCreate" target="_blank" class="body-link"><code>webhookSubscriptionCreate</code></a>/<a href="https://shopify.dev/docs/api/admin-graphql/2025-10/mutations/webhooksubscriptionupdate" target="_blank" class="body-link"><code>webhookSubscriptionUpdate</code></a> mutations and <a href="https://shopify.dev/docs/api/admin-graphql/2025-10/queries/webhooksubscriptions" target="_blank" class="body-link"><code>webhookSubscriptions</code></a> query instead of the deprecated endpoint-specific mutations and <a href="https://shopify.dev/docs/api/admin-graphql/2025-10/queries/webhooksubscriptions#arguments-callbackUrl" target="_blank" class="body-link"><code>callbackUrl</code></a> field.</p>
</div> ]]></description>
    <pubDate>Fri, 08 Aug 2025 16:00:00 +0000</pubDate>
    <atom:published>2025-08-08T16:00:00.000Z</atom:published>
    <atom:updated>2025-08-08T16:00:00.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <category>Admin GraphQL API</category>
    <category>2025-10</category>
    <link>https://shopify.dev/changelog/consolidate-webhook-graphql-surfaces</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/consolidate-webhook-graphql-surfaces</guid>
  </item>
  <item>
    <title>New: Support for nested cart lines</title>
    <description><![CDATA[ <div class=""><p>New fields have been introduced to enable parent-child (nested) relationships between cart lines, supporting use cases such as warranties, engravings, and gift-wrapping.</p>
<ul>
<li><p>Nested cart lines are now supported in the Cart AJAX API, and as of version 2025-10, in Storefront API and Checkout UI Extensions.</p>
</li>
<li><p>Nested (child) lines reference their parent using a dedicated parent field: Use <code>parentId</code> or <code>parent_line_key</code> (Cart AJAX API), <code>parentID</code> (Checkout UI Extensions), <code>parent.lineId</code> or <code>parent.merchandiseId</code> (Storefront API).</p>
</li>
</ul>
<p>To learn more about the impacted APIs and fields, click <a href="https://shopify.dev/docs/apps/build/product-merchandising/nested-cart-lines" target="_blank" class="body-link">here</a>.</p>
</div> ]]></description>
    <pubDate>Wed, 06 Aug 2025 20:45:00 +0000</pubDate>
    <atom:published>2025-08-06T20:45:00.000Z</atom:published>
    <atom:updated>2025-08-06T20:59:21.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <category>Functions</category>
    <category>Checkout UI</category>
    <category>Customer Account API</category>
    <category>Customer Accounts</category>
    <category>Liquid</category>
    <category>Storefront API</category>
    <category>Events &amp; webhooks</category>
    <category>2025-10</category>
    <link>https://shopify.dev/changelog/new-support-for-nested-cart-lines</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/new-support-for-nested-cart-lines</guid>
  </item>
  <item>
    <title>Support for bulk ad campaign search terms export</title>
    <description><![CDATA[ <div class=""><p>Shopify partners can now export search term performance data with detailed targeting breakdowns for multiple ad campaigns simultaneously. Previously, this granular data was only available for one campaign at a time.</p>
<p>With the new export option, you can view search term performance across multiple ad campaigns, categorized by:</p>
<ul>
<li>Country/region</li>
<li>Device type</li>
<li>Shop plan</li>
</ul>
<p>To use this feature, go to the ad campaigns overview page. Select the ad campaigns you want to analyze, then click <strong>Actions</strong> and choose <strong>Export</strong>. Select the new option labeled &quot;Performance by search terms, categorized by country/region, shop plan, and device type.&quot; This will download comprehensive data for your selected ad campaigns.</p>
<p>For more information, visit the <a href="https://shopify.dev/docs/apps/launch/marketing/advertising/check-ad-performance#report-types" target="_blank" class="body-link">Shopify Developer Documentation</a>.</p>
</div> ]]></description>
    <pubDate>Tue, 05 Aug 2025 21:00:00 +0000</pubDate>
    <atom:published>2025-08-05T21:00:00.000Z</atom:published>
    <atom:updated>2025-08-06T17:00:59.000Z</atom:updated>
    <category>App store</category>
    <category>Update</category>
    <link>https://shopify.dev/changelog/support-for-bulk-ad-campaign-search-terms-export</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/support-for-bulk-ad-campaign-search-terms-export</guid>
  </item>
  <item>
    <title>New guidelines for `referenceDocumentUri` in inventory adjustments</title>
    <description><![CDATA[ <div class=""><p>We've released new guidelines and updated documentation for the <a href="https://shopify.dev/docs/api/admin-graphql/latest/mutations/inventoryAdjustQuantities#arguments-input.fields.referenceDocumentUri" target="_blank" class="body-link"><code>referenceDocumentUri</code></a> field in <a href="https://shopify.dev/docs/api/admin-graphql/latest/mutations/inventoryAdjustQuantities" target="_blank" class="body-link">inventory adjustment mutations</a>. By following these guidelines, your apps can maintain inventory traceability, which helps merchants troubleshoot issues and conduct audits more easily. Access the field in admin via the &quot;Inventory adjustment changes&quot; report in Analytics or on the Adjustment History Page. </p>
<p><strong>What’s new:</strong></p>
<ul>
<li>Detailed guidelines for using the <code>referenceDocumentUri</code> field to link each inventory adjustment to its source system and document.</li>
<li>Recommendations for adopting the Global ID (GID) format (<code>gid://namespace/entity/id</code>) to maintain consistency across integrations.</li>
<li>Support for various URI formats, including URLs and custom schemes, ensuring backward compatibility.</li>
<li>Best practices for defining namespaces and entity types.</li>
<li>Code examples for Warehouse Management Systems (WMS), Third-Party Logistics (3PL), Point of Sale (POS), and Enterprise Resource Planning (ERP) integrations.</li>
<li>Migration guides for updating existing implementations.</li>
<li>Validation rules and format specifications.</li>
</ul>
<p><strong>These updates enable you to:</strong></p>
<ul>
<li>Provide merchants with comprehensive audit trails for compliance.</li>
<li>Display your app’s name in Shopify admin inventory history.</li>
<li>Trace inventory changes back to their origin, simplifying troubleshooting.</li>
</ul>
<p>To implement, you'll incorporate the <code>referenceDocumentUri</code> field into the <a href="https://shopify.dev/docs/api/admin-graphql/latest/mutations/inventoryAdjustQuantities" target="_blank" class="body-link"><code>inventoryAdjustQuantities</code> mutation</a>.</p>
<p><a href="https://shopify.dev/docs/apps/build/orders-fulfillment/inventory-management-apps" target="_blank" class="body-link">Explore the updated guidelines and documentation</a></p>
<p><img src="https://screenshot.click/31-17-gbq55-o3ax8.png" alt=""> </p>
<p><img src="https://screenshot.click/31-18-jrogx-a5slu.png" alt=""></p>
</div> ]]></description>
    <pubDate>Tue, 05 Aug 2025 12:36:00 +0000</pubDate>
    <atom:published>2025-08-05T12:36:00.000Z</atom:published>
    <atom:updated>2025-08-05T12:36:00.000Z</atom:updated>
    <category>API</category>
    <category>Update</category>
    <category>Admin GraphQL API</category>
    <link>https://shopify.dev/changelog/new-guidelines-for-referencedocumenturi-in-inventory-adjustments</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/new-guidelines-for-referencedocumenturi-in-inventory-adjustments</guid>
  </item>
  <item>
    <title> _tracking_consent, _landing_page, _orig_referrer cookies will no longer be set</title>
    <description><![CDATA[ <div class=""><h3>What's changing?</h3>
<p>Starting on September 15th, 2025, Shopify will no longer set the following cookies on merchant storefronts:</p>
<ul>
<li><code>_landing_page</code></li>
<li><code>_orig_referrer</code></li>
<li><code>_tracking_consent</code></li>
</ul>
<h3>Required updates</h3>
<p>While accessing internal cookie values is never recommended as they frequently change, any code that currently accesses the cookie values will need to be adapted to use documented APIs.</p>
<h4>_landing_page and _orig_referrer</h4>
<p>We recommend keeping track of these values through browser APIs (<code>window.location.href</code> to save the landing page, and <code>document.referrer</code> for the referrer). To keep track of these values through the user’s session, you may use the <a href="https://shopify.dev/docs/api/web-pixels-api" target="_blank" class="body-link">Web Pixels API</a>. 
In the GraphQL Admin API, you can access this information by <a href="https://shopify.dev/docs/api/admin-graphql/latest/queries/order" target="_blank" class="body-link">querying an order</a>:</p>
<pre><code class="language-graphql">query referrerData {
  order(id: &quot;gid://shopify/Order/14134963208214&quot;) {
    customerJourneySummary {
      lastVisit {
        landingPage
        referrerUrl
      }
    }
  }
}
</code></pre>
<h4>_tracking_consent</h4>
<p>Please use the <a href="https://shopify.dev/docs/api/customer-privacy" target="_blank" class="body-link">Customer Privacy API</a>.</p>
</div> ]]></description>
    <pubDate>Mon, 04 Aug 2025 16:00:00 +0000</pubDate>
    <atom:published>2025-08-04T16:00:00.000Z</atom:published>
    <atom:updated>2025-08-04T16:00:00.000Z</atom:updated>
    <category>Action Required</category>
    <category>API</category>
    <category>Deprecation announcement</category>
    <link>https://shopify.dev/changelog/trackingconsent-landingpage-origreferrer-cookies-will-no-longer-be-set</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/trackingconsent-landingpage-origreferrer-cookies-will-no-longer-be-set</guid>
  </item>
  <item>
    <title>_shopify_y and _shopify_s cookies will no longer be set</title>
    <description><![CDATA[ <div class=""><h3>What's changing?</h3>
<p>Starting on January 1st, 2026 Shopify will no longer set the following cookies on merchant storefronts:</p>
<ul>
<li><code>_shopify_s</code></li>
<li><code>_shopify_y</code></li>
</ul>
<h3>Required updates</h3>
<p>While accessing internal cookie values is never recommended as they frequently change, any code that currently accesses the cookie values will need to be adapted to use documented APIs.</p>
<h4><code>_shopify_y</code></h4>
<p>If you're accessing this value via <code>document.cookie</code> you'll have to use <a href="https://shopify.dev/docs/apps/build/marketing-analytics/pixels" target="_blank" class="body-link">Web Pixels</a> and particularly the <code>clientID</code> property of any Standard or DOM event (See <a href="https://shopify.dev/docs/api/web-pixels-api" target="_blank" class="body-link">API reference</a>).</p>
<p>This example shows a Custom Pixel, but this would work with a Web Pixel App Extension as well.</p>
<ul>
<li>Go to Admin &gt; Settings &gt; Customer Events &gt; Custom Pixels</li>
<li>The following JavaScript within a web pixel would log the ID formerly known as <code>_shopify_y</code> on every page view, assuming proper user consent is given:</li>
</ul>
<pre><code class="language-javascript">analytics.subscribe('page_viewed', (event) =&gt; {
  console.log(&quot;The client's ID is &quot;, event.clientId);
});
</code></pre>
<h4><code>_shopify_s</code></h4>
<p>Shopify will not offer a replacement value. However, as part of the browser APIs (or <a href="https://shopify.dev/docs/api/web-pixels-api/standard-api/browser" target="_blank" class="body-link">Web Pixels API’s <code>browser</code> interface</a>) it is possible to create a session-length cookie, which is equivalent functionality.</p>
</div> ]]></description>
    <pubDate>Mon, 04 Aug 2025 16:00:00 +0000</pubDate>
    <atom:published>2025-08-04T16:00:00.000Z</atom:published>
    <atom:updated>2025-08-04T16:00:00.000Z</atom:updated>
    <category>Action Required</category>
    <category>API</category>
    <category>Deprecation announcement</category>
    <link>https://shopify.dev/changelog/shopifyy-and-shopifys-cookies-will-no-longer-be-set</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/shopifyy-and-shopifys-cookies-will-no-longer-be-set</guid>
  </item>
  <item>
    <title>Meta Pixel Full Funnel Installation Tracking</title>
    <description><![CDATA[ <div class=""><p>We have added support for the <a href="https://developers.facebook.com/docs/marketing-api/conversions-api/" target="_blank" class="body-link">Meta Pixel Conversions API</a>, enabling server-side tracking of app installations. This API allows developers to track <code>Purchase</code> events when merchants install their apps, enhancing attribution accuracy for Facebook advertising campaigns.</p>
<p>To take advantage of this feature, Partners can now <a href="https://shopify.dev/docs/apps/launch/marketing/track-listing-traffic#set-up-facebook-pixel-for-your-app-listing" target="_blank" class="body-link">add their Facebook Pixel tracking ID to their app's <strong>Distribution</strong> settings</a>.</p>
</div> ]]></description>
    <pubDate>Mon, 04 Aug 2025 16:00:00 +0000</pubDate>
    <atom:published>2025-08-04T16:00:00.000Z</atom:published>
    <atom:updated>2025-08-07T15:24:34.000Z</atom:updated>
    <category>App store</category>
    <category>New</category>
    <link>https://shopify.dev/changelog/meta-pixel-full-funnel-installation-tracking</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/meta-pixel-full-funnel-installation-tracking</guid>
  </item>
  <item>
    <title>Request app reviews in admin with the new Reviews API </title>
    <description><![CDATA[ <div class=""><p>The new <a href="https://shopify.dev/docs/api/app-bridge-library/apis/reviews" target="_blank" class="body-link">App Bridge Reviews API</a> allows Shopify apps to request reviews directly within the Shopify admin interface.</p>
<ul>
<li><strong>Better merchant experience:</strong> Leave reviews directly in the Shopify admin with in-context prompts vs. multi-step App Store redirects.</li>
<li><strong>No customization required</strong>: The component has already been designed—you control when the review modal is shown to merchants (<a href="https://shopify.dev/docs/api/app-bridge-library/apis/reviews#best-practices" target="_blank" class="body-link">following our guidelines</a>).</li>
<li><strong>Support callouts:</strong> The <a href="https://shopify.dev/docs/apps/launch/distribution/support-your-customers" target="_blank" class="body-link">“Get Support” button</a> will also be surfaced in the review modal, giving merchants with issues a direct path to resolution as an alternative to leaving a review.</li>
</ul>
<p>Use development stores to test the Reviews API, which bypasses the rate limits and restrictions. <a href="https://shopify.dev/docs/api/app-bridge-library/apis/reviews" target="_blank" class="body-link">Read more</a> about testing and implementing the Reviews API.</p>
</div> ]]></description>
    <pubDate>Mon, 04 Aug 2025 15:20:00 +0000</pubDate>
    <atom:published>2025-08-04T15:20:00.000Z</atom:published>
    <atom:updated>2025-08-04T15:50:10.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <category>App Bridge</category>
    <link>https://shopify.dev/changelog/request-app-reviews-in-admin-with-the-new-reviews-api</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/request-app-reviews-in-admin-with-the-new-reviews-api</guid>
  </item>
  <item>
    <title>Removal of support for the &quot;Sell from all locations&quot; fulfillable inventory setting</title>
    <description><![CDATA[ <div class=""><p>As of July 28, 2025, &quot;Sell only within configured shipping zones&quot; has been enabled on nearly all shops at checkout. This change ensures that customers can only purchase products that are available at fulfillment locations configured to deliver to their shipping zone. This setting will continue to be removed up until September 30, 2025.</p>
<p>&quot;Sell from all locations to all shipping zones&quot; remains an option to control <em>storefront behaviour</em> for merchants who have not previously enabled the &quot;Sell only within configured shipping zones&quot; option.</p>
<p>This update helps prevent overselling and reduces issues such as canceled orders due to regional stock unavailability or the need for manual order corrections.</p>
<p>Developers should note that apps using Shopify APIs to manage recurring subscription orders might encounter an increase in errors that occur when products are unavailable at fulfillment locations that ship to the customer. Additionally, apps managing shipping settings or inventory should ensure that inventory is in stock at locations with valid delivery methods in order to be available for purchase.</p>
<p>See the <a href="https://help.shopify.com/manual/fulfillment/setup/fulfillable-inventory" target="_blank" class="body-link">help documentation</a> to learn more about fulfillable inventory.</p>
</div> ]]></description>
    <pubDate>Fri, 01 Aug 2025 18:00:00 +0000</pubDate>
    <atom:published>2025-08-01T18:00:00.000Z</atom:published>
    <atom:updated>2025-08-04T15:17:54.000Z</atom:updated>
    <category>Platform</category>
    <category>Update</category>
    <category>Admin GraphQL API</category>
    <link>https://shopify.dev/changelog/removal-of-support-for-sell-from-all-locations-fulfillable-inventory-setting</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/removal-of-support-for-sell-from-all-locations-fulfillable-inventory-setting</guid>
  </item>
  <item>
    <title>Shopify Payments Payout GraphQL type supports `external_trace_id`</title>
    <description><![CDATA[ <div class=""><p>As of GraphQL Admin API version <strong>2025-10</strong>, ShopifyPaymentsPayout now includes <code>externalTraceId</code> field</p>
<p>The <code>externalTraceId</code> field provides a unique reference identifier for tracking payouts across external payment systems and financial institutions. </p>
<p>For more information about <code>ShopifyPaymentsPayout</code>, visit the <a href="https://shopify.dev/docs/api/admin-graphql/2025-10/objects/shopifypaymentspayout" target="_blank" class="body-link">Shopify.dev documentation</a>.</p>
</div> ]]></description>
    <pubDate>Fri, 01 Aug 2025 16:00:00 +0000</pubDate>
    <atom:published>2025-08-01T16:00:00.000Z</atom:published>
    <atom:updated>2025-08-01T16:00:00.000Z</atom:updated>
    <category>API</category>
    <category>Update</category>
    <category>Admin GraphQL API</category>
    <category>2025-10</category>
    <link>https://shopify.dev/changelog/shopify-payments-payout-graphql-type-supports-externaltraceid</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/shopify-payments-payout-graphql-type-supports-externaltraceid</guid>
  </item>
  <item>
    <title>Orders query now supports `current_total_price` and `total_weight` filters and `CURRENT_TOTAL_PRICE` as a `sortKey`</title>
    <description><![CDATA[ <div class=""><p>The <a href="https://shopify.dev/docs/api/admin-graphql/unstable/queries/orders" target="_blank" class="body-link">orders</a> <code>query</code> argument now supports the <code>current_total_price</code> (<a href="https://shopify.dev/docs/api/admin-graphql/unstable/queries/orders#argument-query-filter-current_total_price" target="_blank" class="body-link">documentation</a>) and <code>total_weight</code> (<a href="https://shopify.dev/docs/api/admin-graphql/unstable/queries/orders#argument-query-filter-total_weight" target="_blank" class="body-link">documentation</a>) filters. Additionally, we've introduced the ability to use <code>sortKey</code> with <code>CURRENT_TOTAL_PRICE</code> (<a href="https://shopify.dev/docs/api/admin-graphql/unstable/queries/orders#arguments-sortKey.enums.CURRENT_TOTAL_PRICE" target="_blank" class="body-link">documentation</a>).</p>
</div> ]]></description>
    <pubDate>Fri, 01 Aug 2025 16:00:00 +0000</pubDate>
    <atom:published>2025-08-01T16:00:00.000Z</atom:published>
    <atom:updated>2025-08-01T16:00:00.000Z</atom:updated>
    <category>API</category>
    <category>Update</category>
    <category>Admin GraphQL API</category>
    <category>2025-10</category>
    <link>https://shopify.dev/changelog/orders-query-now-supports-currenttotalprice-and-totalweight-filters-and-currenttotalprice-as-a-sortkey</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/orders-query-now-supports-currenttotalprice-and-totalweight-filters-and-currenttotalprice-as-a-sortkey</guid>
  </item>
  <item>
    <title>Deprecation of the `ProductVariant.taxCode` field</title>
    <description><![CDATA[ <div class=""><p>As of Admin GraphQL API version <code>2025-10</code>, we are deprecating the <code>taxCode</code> field from the <code>ProductVariant</code> object. This change is part of the Avalara AvaTax app deprecation and will affect how you handle tax classification for product variants.</p>
<p>The <code>taxCode</code> field on <code>ProductVariant</code> objects will not be available in future API versions. If your app currently relies on this field for tax calculations or reporting, you must update your implementation before the field is fully removed.</p>
<h2>Why We're Making This Change</h2>
<p>We are deprecating the <code>taxCode</code> field because the Avalara AvaTax app, which powered this functionality, is being discontinued. <strong>This field applies only to the stores that have the Avalara AvaTax app installed.</strong></p>
<h2>What You Need to Do</h2>
<p>If your app uses the <code>taxCode</code> field, you should:</p>
<ol>
<li><strong>Audit Your Current Implementation</strong>: Identify where your app reads or writes the <code>taxCode</code> field.</li>
<li><strong>Update Your GraphQL Queries</strong>: Remove references to the <code>taxCode</code> field from your queries and mutations.</li>
<li><strong>Test Thoroughly</strong>: Ensure your app continues to function correctly without the deprecated field.</li>
</ol>
<h2>Timeline</h2>
<p>The <code>taxCode</code> field will continue to return data through API version <code>2025-10</code>. However, you should migrate away from it as soon as possible, as future API versions will not include this field.</p>
<h2>Learn More</h2>
<p>For more information on the deprecation of the Avalara AvaTax app, refer to the documentation on <a href="https://help.shopify.com/en/manual/taxes/tax-services#migrating-from-avatax" target="_blank" class="body-link">migrating from AvaTax</a>.</p>
<p>For guidance on using the new Avalara Tax Compliance app, refer to the documentation on <a href="https://knowledge.avalara.com/bundle/uqa1710993217954_uqa1710993217954/page/dir1743588192947.html" target="_blank" class="body-link">mapping Avalara tax codes in Shopify</a>.</p>
</div> ]]></description>
    <pubDate>Wed, 30 Jul 2025 18:46:00 +0000</pubDate>
    <atom:published>2025-07-30T18:46:00.000Z</atom:published>
    <atom:updated>2025-07-30T18:46:43.000Z</atom:updated>
    <category>Action Required</category>
    <category>API</category>
    <category>Deprecation announcement</category>
    <category>Admin GraphQL API</category>
    <category>Admin REST API</category>
    <category>2025-10</category>
    <link>https://shopify.dev/changelog/deprecation-of-tax-code-field</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/deprecation-of-tax-code-field</guid>
  </item>
  <item>
    <title>MerchandiseSellingPlanNotApplicableOnCompanyLocation warning code for Storefront API</title>
    <description><![CDATA[ <div class=""><p>Starting with API version 2025-10 of the GraphQL Storefront API, we have introduced the <code>SELLING_PLAN_NOT_APPLICABLE_ON_COMPANY_LOCATION</code> warning code to the  <a href="https://shopify.dev/docs/api/storefront/2025-10/enums/CartWarningCode" target="_blank" class="body-link">CartWarningCode enum</a>. This warning code is triggered when a logged in B2B customer creates a cart with a selling plan or adds a merchandise item with a selling plan to their cart.</p>
</div> ]]></description>
    <pubDate>Wed, 30 Jul 2025 16:00:00 +0000</pubDate>
    <atom:published>2025-07-30T16:00:00.000Z</atom:published>
    <atom:updated>2025-07-30T16:00:00.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <category>Storefront API</category>
    <category>2025-10</category>
    <link>https://shopify.dev/changelog/sellingplannotapplicableoncompanylocation-warning-code-for-storefront-api</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/sellingplannotapplicableoncompanylocation-warning-code-for-storefront-api</guid>
  </item>
  <item>
    <title>Storefront API Cart now supports replacing Cart delivery addresses</title>
    <description><![CDATA[ <div class=""><p>As of version 2025-10 of the GraphQL Storefront API, you can replace all delivery addresses that are present on a cart in a single operation.</p>
<p>The new <a href="https://shopify.dev/docs/api/storefront/2025-10/mutations/cartDeliveryAddressesReplace" target="_blank" class="body-link"><code>cartDeliveryAddressesReplace</code> </a> mutation accepts an <code>addresses</code> field for specifying the list of delivery addresses to replace. </p>
</div> ]]></description>
    <pubDate>Tue, 29 Jul 2025 16:00:00 +0000</pubDate>
    <atom:published>2025-07-29T16:00:00.000Z</atom:published>
    <atom:updated>2025-07-29T16:00:00.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <category>Storefront API</category>
    <category>2025-10</category>
    <link>https://shopify.dev/changelog/storefront-api-cart-now-supports-replacing-cart-delivery-addresses</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/storefront-api-cart-now-supports-replacing-cart-delivery-addresses</guid>
  </item>
  <item>
    <title>Hydrogen deploys automatically add preview URLs to Customer Account API application setup</title>
    <description><![CDATA[ <div class=""><p>When a Hydrogen branch is deployed, its new preview URL is automatically added to the application setup for the Customer Account API. This ensures that OAuth redirects, logouts, and JavaScript-origin checks continue to function seamlessly across deployments without requiring manual updates to settings. While these auto-added URLs are hidden from the settings page, any URIs added directly in the Admin remain visible and editable.</p>
</div> ]]></description>
    <pubDate>Tue, 22 Jul 2025 16:00:00 +0000</pubDate>
    <atom:published>2025-07-22T16:00:00.000Z</atom:published>
    <atom:updated>2025-07-22T16:00:00.000Z</atom:updated>
    <category>API</category>
    <category>Update</category>
    <category>Customer Account API</category>
    <link>https://shopify.dev/changelog/automatically-add-preview-urls-to-customer-account-api-setup</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/automatically-add-preview-urls-to-customer-account-api-setup</guid>
  </item>
  <item>
    <title>Analytics API now available for Customer Account UI extensions</title>
    <description><![CDATA[ <div class=""><p>Starting from version <code>2025-07</code>, <a href="https://shopify.dev/docs/api/customer-account-ui-extensions/2025-07" target="_blank" class="body-link">Customer Account UI extensions</a> will have the capability to access the <a href="https://shopify.dev/docs/api/customer-account-ui-extensions/2025-07/apis/analytics" target="_blank" class="body-link">analytics object</a> from the Standard API. This enhancement allows you to publish custom events to <a href="https://shopify.dev/docs/api/web-pixels-api" target="_blank" class="body-link">Shopify Web Pixels</a> directly from your extensions, enabling percise tracking of customer interactions with your extension.</p>
<p>Note: To ensure your extension is up to date, please consider updating <code>@shopify/ui-extensions</code> and <code>@shopify/ui-extensions-react</code> to the most recent stable version, <code>2025.7.1</code> or later</p>
<p><a href="https://shopify.dev/docs/api/customer-account-ui-extensions/2025-07/apis/analytics" target="_blank" class="body-link">Read more</a> about how to implement the analytics API in customer accounts.</p>
</div> ]]></description>
    <pubDate>Tue, 22 Jul 2025 14:00:00 +0000</pubDate>
    <atom:published>2025-07-22T14:00:00.000Z</atom:published>
    <atom:updated>2025-07-22T14:00:00.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <category>Customer Accounts</category>
    <link>https://shopify.dev/changelog/analytics-api-now-available-for-customer-account-ui-extensions</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/analytics-api-now-available-for-customer-account-ui-extensions</guid>
  </item>
  <item>
    <title>Web Pixels now run on Customer Accounts and Order Status Page</title>
    <description><![CDATA[ <div class=""><p>Web pixels now automatically load on Customer Account and Order Status pages, enabling you to track the entire customer journey from discovery to order management.</p>
<ul>
<li>Shops must use a <a href="https://help.shopify.com/en/manual/domains/add-a-domain/connecting-domains/connect-domain-customer-account" target="_blank" class="body-link">custom domain</a> (e.g., <code>accounts.your-store.com</code>) for customer accounts.</li>
<li>The <a href="https://shopify.dev/docs/api/web-pixels-api/standard-events/page_viewed" target="_blank" class="body-link"><code>page_viewed</code></a> events and the <a href="https://shopify.dev/docs/api/web-pixels-api/advanced-dom-events" target="_blank" class="body-link">Advanced DOM API</a> are supported.</li>
<li>You can publish <a href="https://shopify.dev/docs/api/web-pixels-api/emitting-data#publishing-custom-events" target="_blank" class="body-link">custom events</a> through a <a href="https://shopify.dev/docs/api/customer-account-ui-extensions" target="_blank" class="body-link">UI extension</a>.</li>
</ul>
</div> ]]></description>
    <pubDate>Mon, 21 Jul 2025 15:35:00 +0000</pubDate>
    <atom:published>2025-07-21T15:35:00.000Z</atom:published>
    <atom:updated>2025-07-21T20:11:43.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <link>https://shopify.dev/changelog/web-pixels-now-run-on-customer-accounts-and-order-status-page</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/web-pixels-now-run-on-customer-accounts-and-order-status-page</guid>
  </item>
  <item>
    <title>Payments App extensions deployment just got faster</title>
    <description><![CDATA[ <div class=""><p>You can now deploy payments app extensions instantly without waiting for manual review from Shopify. We've replaced our manual configuration review process with automated validation that gives you immediate feedback directly in your CLI.</p>
<p><strong>What this means for you:</strong></p>
<ul>
<li>Deploy immediately: No more waiting for approval—push your payments app extension updates to merchants as soon as they're ready</li>
<li>Catch issues faster: Get instant feedback on configuration problems during submission, so you can fix them before deployment</li>
<li>Stay compliant automatically: We'll validate that your extension supports test mode, uses stable API versions, and includes payments methods that match your extension type</li>
</ul>
<p><strong>How it works:</strong>
  When you submit through Shopify CLI, your TOML configuration is automatically evaluated and you'll get immediate feedback on any issues. The deployment process remains the same—just without the manual review step.</p>
</div> ]]></description>
    <pubDate>Fri, 18 Jul 2025 14:00:00 +0000</pubDate>
    <atom:published>2025-07-18T14:00:00.000Z</atom:published>
    <atom:updated>2025-07-18T14:00:00.000Z</atom:updated>
    <category>API</category>
    <category>Update</category>
    <category>Payments Apps API</category>
    <link>https://shopify.dev/changelog/payment-app-extensions-deployment-just-got-faster</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/payment-app-extensions-deployment-just-got-faster</guid>
  </item>
  <item>
    <title>Cart quantity limits are now determined by market region</title>
    <description><![CDATA[ <div class=""><p>Cart quantity limits now depend on inventory available in the buyer's market region, not total stock. Previously, customers could add up to the total product inventory from all locations to their cart. Now, if a customer attempts to add more items than are available for fulfillment in their market, the quantity will automatically be reduced to the available amount and the API will return a message to explain the adjustment.</p>
<p>This change applies to shops with <a href="https://help.shopify.com/en/manual/fulfillment/setup/fulfillable-inventory" target="_blank" class="body-link">fulfillable inventory</a> set to <strong>sell only within configured shipping zones</strong> and impacts cart operations in the <a href="https://shopify.dev/docs/api/storefront" target="_blank" class="body-link">GraphQL Storefront API</a>. </p>
</div> ]]></description>
    <pubDate>Fri, 18 Jul 2025 14:00:00 +0000</pubDate>
    <atom:published>2025-07-18T14:00:00.000Z</atom:published>
    <atom:updated>2025-07-18T14:00:00.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <category>Storefront API</category>
    <link>https://shopify.dev/changelog/contextualized-inventory-availability-in-cart-updates</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/contextualized-inventory-availability-in-cart-updates</guid>
  </item>
  <item>
    <title>Shopify App Store reviews now move between published and archived states based on merchant status</title>
    <description><![CDATA[ <div class=""><p>Our review system continues to evolve to prioritize relevant and trusted reviews. </p>
<ul>
<li>Reviews are archived if they’re left by stores that are on a trial or discounted plan, or that are no longer active. </li>
<li>Archived reviews are automatically re-published once the store has paid for a full priced plan or reactivates.</li>
<li>Developers will receive an email notification for each new review, indicating if it is published or archived.</li>
</ul>
<p>Learn more about archiving and unpublishing criteria in our <a href="https://shopify.dev/docs/apps/launch/marketing/manage-app-reviews#archived-and-unpublished-reviews" target="_blank" class="body-link">help docs</a>.</p>
</div> ]]></description>
    <pubDate>Thu, 17 Jul 2025 16:15:00 +0000</pubDate>
    <atom:published>2025-07-17T16:15:00.000Z</atom:published>
    <atom:updated>2025-07-17T18:58:03.000Z</atom:updated>
    <category>App store</category>
    <category>Update</category>
    <link>https://shopify.dev/changelog/shopify-app-store-reviews-now-move-between-published-and-archived-states-based-on-merchant-status</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/shopify-app-store-reviews-now-move-between-published-and-archived-states-based-on-merchant-status</guid>
  </item>
  <item>
    <title>Updates effective July 16 to our Partner Program Agreement and API License and Terms of Use</title>
    <description><![CDATA[ <div class=""><p>EFFECTIVE Wednesday, July 16, 2025 ACTION REQUIRED</p>
<p>We've made changes to our <a href="https://www.shopify.ca/partners/terms?shpxid=823b80d5-C747-48F6-6CF0-832254EC6F4B" target="_blank" class="body-link">Partner Program Agreement</a> and <a href="https://www.shopify.com/legal/api-terms?shpxid=823b80d5-C747-48F6-6CF0-832254EC6F4B" target="_blank" class="body-link">API License and Terms of Use</a>. These updates include terms that are intended to support the growth of Shopify Partners and Merchants, while ensuring the continued reliability and performance of our platform and its offerings.</p>
<p>These changes come into effect as of today, July 16 2025. Updates to Revenue Share are effective January 1, 2025.</p>
<p>Continued use of Shopify services on or after Wednesday, July 16, 2025 confirms that you’ve read, understood, and accepted these new terms.</p>
<p>For more information and frequently asked questions, please visit the <a href="https://help.shopify.com/en/partners/ppa-api-faq?shpxid=823b80d5-C747-48F6-6CF0-832254EC6F4B" target="_blank" class="body-link">Shopify Help Center</a>.</p>
</div> ]]></description>
    <pubDate>Wed, 16 Jul 2025 21:00:00 +0000</pubDate>
    <atom:published>2025-07-16T21:00:00.000Z</atom:published>
    <atom:updated>2025-07-16T21:00:00.000Z</atom:updated>
    <category>Platform</category>
    <category>New</category>
    <link>https://shopify.dev/changelog/updates-effective-july-16-to-our-partner-program-agreement-and-api-license-and-terms-of-use</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/updates-effective-july-16-to-our-partner-program-agreement-and-api-license-and-terms-of-use</guid>
  </item>
  <item>
    <title>Improved theme discovery and merchandising on the Shopify Theme Store </title>
    <description><![CDATA[ <div class=""><p>We’ve rolled out several updates to the Shopify Theme Store that help merchants find the right theme faster—while giving your themes more visibility:</p>
<p><strong>Dedicated theme cards and listing pages for theme presets</strong> 
Each preset now has its own theme card and listing page, providing greater opportunity to merchandise themes to specific industries and catalog sizes.</p>
<p><strong>Embedded demo store experience on the theme listing page</strong>
The demo store now loads directly on the theme listing page, so merchants can explore without navigating away.</p>
<p><strong>Updated industry and catalog size filters</strong>
Theme Store filters have been updated to make it easier for merchants to get more granular in their search. </p>
<p>These changes aim to improve theme discoverability and help connect merchants with the themes that best fit their needs.</p>
<p>Explore these changes on the <a href="https://themes.shopify.com/themes" target="_blank" class="body-link">Shopify Theme Store</a></p>
</div> ]]></description>
    <pubDate>Tue, 15 Jul 2025 17:25:00 +0000</pubDate>
    <atom:published>2025-07-15T17:25:00.000Z</atom:published>
    <atom:updated>2025-07-15T19:09:20.000Z</atom:updated>
    <category>Shopify Theme Store</category>
    <category>Update</category>
    <link>https://shopify.dev/changelog/improved-theme-discovery-and-merchandising-on-the-shopify-theme-store</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/improved-theme-discovery-and-merchandising-on-the-shopify-theme-store</guid>
  </item>
  <item>
    <title>New fields for inventory shipment timestamps</title>
    <description><![CDATA[ <div class=""><p>You can now access inventory shipment timestamps through the Admin GraphQL API. You can now use the <code>dateCreated</code>, <code>dateReceived</code>, and <code>dateShipped</code> fields within the <code>InventoryShipment</code> type. Additionally, you can set timestamp values using the following mutations:</p>
<ul>
<li><code>inventoryShipmentCreate</code>: Includes <code>dateCreated</code> in the input to specify the creation date of the shipment.</li>
<li><code>inventoryShipmentMarkInTransit</code>: Accepts <code>dateShipped</code> as an argument to indicate when the shipment was dispatched.</li>
<li><code>inventoryShipmentReceive</code>: Uses <code>dateReceived</code> as an argument to denote when the shipment was initially received.</li>
</ul>
<p>All the above timestamp fields return dates in UTC format. They are currently accessible via the unstable version of the API and will be available in the stable admin GraphQL API version 2025-10.</p>
</div> ]]></description>
    <pubDate>Tue, 15 Jul 2025 16:00:00 +0000</pubDate>
    <atom:published>2025-07-15T16:00:00.000Z</atom:published>
    <atom:updated>2025-07-16T06:31:13.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <category>Admin GraphQL API</category>
    <category>2025-10</category>
    <link>https://shopify.dev/changelog/inventory-shipment-timestamp-fields</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/inventory-shipment-timestamp-fields</guid>
  </item>
  <item>
    <title>Sunsetting Flex sections developer preview</title>
    <description><![CDATA[ <div class=""><p>We've closed the Flex sections developer preview as of July 14th. This preview included theme blocks and style settings.</p>
<p>Theme blocks are now available to all theme developers. You can start using theme blocks immediately to create reusable modules for structuring content within sections. Learn more about <a href="https://shopify.dev/docs/storefronts/themes/architecture/blocks/theme-blocks" target="_blank" class="body-link">theme blocks</a> in our documentation.</p>
<p>Style settings are no longer supported as we plan to explore different approaches in the future. You can remove any references to style settings from your development stores.</p>
</div> ]]></description>
    <pubDate>Mon, 14 Jul 2025 16:00:00 +0000</pubDate>
    <atom:published>2025-07-14T16:00:00.000Z</atom:published>
    <atom:updated>2025-07-21T17:39:20.000Z</atom:updated>
    <category>Themes</category>
    <category>Deprecation announcement</category>
    <link>https://shopify.dev/changelog/sunsetting-flex-sections-developer-preview</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/sunsetting-flex-sections-developer-preview</guid>
  </item>
  <item>
    <title>Add option to filter by dispute type in OrderListQuery GraphQL query</title>
    <description><![CDATA[ <div class=""><p>A new filter called <code>dispute_type</code> has been added to the available filters in the Order list (GraphQL query <code>OrderListData</code>). It is a multiple choice filter that allows to show only orders that have a <code>chargeback</code> and/or an <code>inquiry</code> associated with it.</p>
</div> ]]></description>
    <pubDate>Sat, 12 Jul 2025 16:00:00 +0000</pubDate>
    <atom:published>2025-07-12T16:00:00.000Z</atom:published>
    <atom:updated>2025-08-13T13:58:25.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <category>Admin GraphQL API</category>
    <category>2025-10</category>
    <link>https://shopify.dev/changelog/add-option-to-filter-by-dispute-type-in-order-list</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/add-option-to-filter-by-dispute-type-in-order-list</guid>
  </item>
  <item>
    <title>The `_ab` cookie will no longer be set</title>
    <description><![CDATA[ <div class=""><h3>What's changing?</h3>
<p>Starting on August 18th, 2025, Shopify will no longer set the <code>_ab</code> cookie on merchant storefronts or checkout. This cookie was used to enable/disable the preview bar.</p>
<p>You can hide the preview bar while previewing a theme by adding the <code>pb=0</code> parameter to the URL.</p>
</div> ]]></description>
    <pubDate>Sat, 12 Jul 2025 16:00:00 +0000</pubDate>
    <atom:published>2025-07-12T16:00:00.000Z</atom:published>
    <atom:updated>2025-07-16T16:54:49.000Z</atom:updated>
    <category>Themes</category>
    <category>Deprecation announcement</category>
    <link>https://shopify.dev/changelog/the-ab-cookie-will-no-longer-be-set</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/the-ab-cookie-will-no-longer-be-set</guid>
  </item>
  <item>
    <title>Server Pixels: added `subtotal_price` to checkout events</title>
    <description><![CDATA[ <div class=""><p>The <code>subtotal_price</code> field has been added to Server Pixel events to enhance transaction data tracking. This field is now available in the following events:</p>
<ul>
<li><code>checkout_started</code></li>
<li><code>payment_info_submitted</code></li>
<li><code>checkout_completed</code></li>
</ul>
<p>The <code>subtotal_price</code> represents the sum of all line item prices, after applying product and order level discounts.</p>
</div> ]]></description>
    <pubDate>Thu, 03 Jul 2025 16:00:00 +0000</pubDate>
    <atom:published>2025-07-03T16:00:00.000Z</atom:published>
    <atom:updated>2025-07-07T16:10:18.000Z</atom:updated>
    <category>API</category>
    <category>Update</category>
    <link>https://shopify.dev/changelog/server-pixels-added-subtotalprice-to-checkout-events</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/server-pixels-added-subtotalprice-to-checkout-events</guid>
  </item>
  <item>
    <title>POS UI Extensions 2025-07 update</title>
    <description><![CDATA[ <div class=""><p>As of July 3, 2025, we've made the following updates to POS UI Extensions:</p>
<h3>Breaking Changes</h3>
<p>We've removed the deprecated <a href="https://shopify.dev/docs/api/pos-ui-extensions/components/formattedtextfield" target="_blank" class="body-link"><code>FormattedTextField</code></a> component. Update your code to use <a href="https://shopify.dev/docs/api/pos-ui-extensions/components/textfield" target="_blank" class="body-link"><code>TextField</code></a> instead. </p>
<p><code>FormattedTextField</code> still works in POS 10.6.0, but will no longer function in POS 10.7.0.</p>
<h3>Deprecations</h3>
<p>We've deprecated the following property values on the <a href="https://shopify.dev/docs/api/pos-ui-extensions/components/icon" target="_blank" class="body-link"><code>Icon</code></a> component:</p>
<ul>
<li>For the <a href="https://shopify.dev/docs/api/pos-ui-extensions/latest/components/icon#icon-propertydetail-size" target="_blank" class="body-link"><code>size</code></a> property, we've deprecated: <code>'minor'</code>, <code>'major'</code>, <code>'spot'</code>, <code>'caption'</code>, <code>'badge'</code>. Use <code>'s'</code>, <code>'m'</code>, <code>'l'</code>, <code>'xl'</code> instead.</li>
<li>For the <a href="https://shopify.dev/docs/api/pos-ui-extensions/latest/components/icon#icon-propertydetail-name" target="_blank" class="body-link"><code>name</code></a> property, we've deprecated <code>'arrow'</code>, <code>'available-at-other-locations'</code>, <code>'collections'</code>, <code>'connectivity-warning'</code>, <code>'delivery'</code>, <code>'home'</code>, <code>'image-placeholder'</code>, <code>'internet'</code>, <code>'menu'</code>, <code>'orders'</code>, <code>'products'</code>, <code>'shipment'</code>. See valid values for <a href="https://shopify.dev/docs/api/pos-ui-extensions/latest/components/icon#icon-propertydetail-name" target="_blank" class="body-link"><code>IconName</code></a>.</li>
</ul>
<h3>Important Fixes</h3>
<p>We've updated the <a href="https://shopify.dev/docs/api/pos-ui-extensions/targets/draft-order-details/pos-draft-order-details-block-render" target="_blank" class="body-link"><code>pos.draft-order-details.block.render</code></a> target to allow block components (<a href="https://github.com/Shopify/ui-extensions/blob/8e96f10736bd1c20628f94bfbb7b873d27fd5346/packages/ui-extensions/src/surfaces/point-of-sale/targets.ts#L24" target="_blank" class="body-link"><code>BlockComponents</code></a>). Previously, this target erroneously accepted action components (<a href="https://github.com/Shopify/ui-extensions/blob/8e96f10736bd1c20628f94bfbb7b873d27fd5346/packages/ui-extensions/src/surfaces/point-of-sale/targets.ts#L19" target="_blank" class="body-link"><code>ActionComponents</code></a>), which are intended targets like <code>pos.draft-order-details.action.render</code>.</p>
<h3>Additions</h3>
<p>Along with the above deprecations and fixes, we've added the following:</p>
<ul>
<li>Added a required <code>posVersion</code> property to the <a href="https://shopify.dev/docs/api/pos-ui-extensions/apis/session-api" target="_blank" class="body-link"><code>Session</code></a> interface.</li>
<li>Added an optional <code>currency</code> property to the <a href="https://shopify.dev/docs/api/pos-ui-extensions/apis/cart-line-item-api#cartlineitemapi-propertydetail-cartlineitem" target="_blank" class="body-link"><code>Discount</code></a> interface.</li>
<li>Added an <code>executedAt</code> property to the <a href="https://shopify.dev/docs/api/pos-ui-extensions/targets/receipts/pos-receipt-footer-block-render#transactioncompletewithreprintdata-propertydetail-transaction" target="_blank" class="body-link"><code>BaseTransactionComplete</code></a> interface.</li>
<li>Added optional <code>exchangeId</code> and <code>returnId</code> properties to the <a href="https://shopify.dev/docs/api/pos-ui-extensions/targets/receipts/pos-receipt-footer-block-render#transactioncompletewithreprintdata-propertydetail-transaction" target="_blank" class="body-link"><code>ReturnTransactionData</code></a> interface.</li>
<li>Added a required <code>variantId</code> property to the <a href="https://shopify.dev/docs/api/pos-ui-extensions/apis/product-api#productapi-propertydetail-variantid" target="_blank" class="body-link"><code>ProductApi</code></a> interface.</li>
<li>Added an optional <code>taxLines</code> property to the <a href="https://shopify.dev/docs/api/pos-ui-extensions/targets/post-transaction/pos-transaction-complete-event-observe#transactioncompletedata-propertydetail-transaction" target="_blank" class="body-link"><code>ShippingLine</code></a> interface.</li>
<li>Added an optional <code>onBlur</code> handler to the <a href="https://shopify.dev/docs/api/pos-ui-extensions/components/searchbar" target="_blank" class="body-link"><code>SearchBar</code></a> component.</li>
<li>Added an optional <code>tone</code> property to the <a href="https://shopify.dev/docs/api/pos-ui-extensions/components/icon" target="_blank" class="body-link"><code>Icon</code></a> component, and added new <code>name</code> and <code>size</code> options.</li>
</ul>
<p>Additionally, in developer preview, we've introduced a <a href="https://shopify.dev/docs/api/pos-ui-extensions/apis/storage-api" target="_blank" class="body-link">Storage API</a>. This API gives UI extensions access to store data on the POS device where the extension is running.</p>
<h3>Versions</h3>
<p>All changes are available for POS UI Extensions version 2025-07 and POS app version 10.6.0. For complete version details, refer to the <a href="https://shopify.dev/docs/api/pos-ui-extensions/versions" target="_blank" class="body-link">version log</a>.</p>
</div> ]]></description>
    <pubDate>Thu, 03 Jul 2025 16:00:00 +0000</pubDate>
    <atom:published>2025-07-03T16:00:00.000Z</atom:published>
    <atom:updated>2025-07-03T18:21:25.000Z</atom:updated>
    <category>Action Required</category>
    <category>API</category>
    <category>Breaking API Change</category>
    <category>POS Extensions</category>
    <link>https://shopify.dev/changelog/pos-ui-extensions-2025-07-update</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/pos-ui-extensions-2025-07-update</guid>
  </item>
  <item>
    <title>Changes to Cart token format for AJAX and Storefront GraphQL Cart APIs</title>
    <description><![CDATA[ <div class=""><p>Cart tokens will now be returned with a new format for both the AJAX and Storefront GraphQL Cart APIs. API features and functionality remain unchanged. Apps and themes should be designed to handle cart tokens in any format and of any length. Treat the cart token as a random identifier that will change in the future.</p>
<p>Action Required: Ensure that any app and theme code is free from hard-coded assumptions (ex. Using regex to identify a cart token) on the format and structure of the cart token.</p>
</div> ]]></description>
    <pubDate>Wed, 02 Jul 2025 16:00:00 +0000</pubDate>
    <atom:published>2025-07-02T16:00:00.000Z</atom:published>
    <atom:updated>2025-07-02T17:20:32.000Z</atom:updated>
    <category>Action Required</category>
    <category>API</category>
    <category>Update</category>
    <link>https://shopify.dev/changelog/changes-to-cart-token-format-for-ajax-and-storefront-graphql-cart-apis</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/changes-to-cart-token-format-for-ajax-and-storefront-graphql-cart-apis</guid>
  </item>
  <item>
    <title>New Built for Shopify requirements for marketing apps – Effective July 1, 2025</title>
    <description><![CDATA[ <div class=""><p>Starting <strong>July 1, 2025,</strong> new <strong>category-specific requirements apply to marketing apps</strong> in the Built for Shopify (BFS) program. These requirements apply to the following categories:</p>
<ul>
<li><a href="https://shopify.dev/docs/apps/launch/built-for-shopify/requirements#ads-apps" target="_blank" class="body-link">Ads apps</a> – <em>all criteria required</em></li>
<li><a href="https://shopify.dev/docs/apps/launch/built-for-shopify/requirements#affiliate-program-apps" target="_blank" class="body-link">Affiliate program apps</a> – <em>all criteria required</em></li>
<li><a href="https://shopify.dev/docs/apps/launch/built-for-shopify/requirements#analytics-apps" target="_blank" class="body-link">Analytics apps</a> – <em>all criteria required</em></li>
<li><a href="https://shopify.dev/docs/apps/launch/built-for-shopify/requirements#email-marketing-apps" target="_blank" class="body-link">Email marketing apps</a> – <em>select criteria based on your app's functionality</em></li>
<li><a href="https://shopify.dev/docs/apps/launch/built-for-shopify/requirements#forms-apps" target="_blank" class="body-link">Forms apps</a> – <em>all criteria required</em></li>
<li><a href="https://shopify.dev/docs/apps/launch/built-for-shopify/requirements#sms-marketing-apps" target="_blank" class="body-link">SMS marketing apps</a> – <em>select criteria based on your app's functionality</em></li>
<li><a href="https://shopify.dev/docs/apps/launch/built-for-shopify/requirements#use-customer-account-ui-extensions" target="_blank" class="body-link">Subscription apps</a> - <em>Customer Account UI extensions are now required</em></li>
</ul>
<p>These requirements will be enforced during manual reviews of your app, which occur when you submit your app and at annual review.</p>
<p>For a full breakdown of these requirements, visit our <a href="https://shopify.dev/docs/apps/launch/built-for-shopify" target="_blank" class="body-link">developer documentation</a>.</p>
</div> ]]></description>
    <pubDate>Tue, 01 Jul 2025 16:00:00 +0000</pubDate>
    <atom:published>2025-07-01T16:00:00.000Z</atom:published>
    <atom:updated>2025-07-01T16:00:00.000Z</atom:updated>
    <category>Action Required</category>
    <category>Built for Shopify</category>
    <category>New</category>
    <link>https://shopify.dev/changelog/new-built-for-shopify-requirements-for-marketing-apps-effective-july-1-2025</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/new-built-for-shopify-requirements-for-marketing-apps-effective-july-1-2025</guid>
  </item>
  <item>
    <title>Order cancellation now supports refunds to store credit</title>
    <description><![CDATA[ <div class=""><p>As of GraphQL Admin API version <code>2025-07</code>, the <a href="https://shopify.dev/docs/api/admin-graphql/2025-07/mutations/orderCancel" target="_blank" class="body-link"><code>orderCancel</code> mutation</a> allows you to issue refunds as store credit, in addition to the original payment methods, when orders are cancelled. </p>
<p>This update introduces a new <a href="https://shopify.dev/docs/api/admin-graphql/2025-07/mutations/orderCancel#arguments-refundMethod" target="_blank" class="body-link"><code>refundMethod</code> input</a>, which offers greater flexibility in handling customer refunds during order cancellations, and deprecates the existing <a href="https://shopify.dev/docs/api/admin-graphql/2025-07/mutations/orderCancel#arguments-refund" target="_blank" class="body-link"><code>refund</code> input</a>. </p>
<h4>Action required:</h4>
<p>If you want to continue to issue refunds to the original payments methods on order cancellation, replace your usages of the <a href="https://shopify.dev/docs/api/admin-graphql/2025-07/mutations/orderCancel#arguments-refund" target="_blank" class="body-link"><code>refund</code> input</a> with the new <a href="https://shopify.dev/docs/api/admin-graphql/2025-07/mutations/orderCancel#arguments-refundMethod.fields.originalPaymentMethodsRefund" target="_blank" class="body-link"><code>refundMethod.originalPaymentMethodsRefund</code> input</a> going forward. </p>
<p>For detailed information and examples on how to implement the new input, visit our <a href="https://shopify.dev/docs/api/admin-graphql/2025-07/mutations/orderCancel" target="_blank" class="body-link">orderCancel documentation</a> on Shopify.dev.</p>
</div> ]]></description>
    <pubDate>Tue, 01 Jul 2025 16:00:00 +0000</pubDate>
    <atom:published>2025-07-01T16:00:00.000Z</atom:published>
    <atom:updated>2025-07-01T16:00:00.000Z</atom:updated>
    <category>API</category>
    <category>Deprecation announcement</category>
    <category>Admin GraphQL API</category>
    <category>2025-07</category>
    <link>https://shopify.dev/changelog/ordercancel-mutation-now-supports-refunds-to-store-credit</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/ordercancel-mutation-now-supports-refunds-to-store-credit</guid>
  </item>
  <item>
    <title>Customer Account API now includes subscription discount data</title>
    <description><![CDATA[ <div class=""><p>The <a href="https://shopify.dev/docs/api/customer" target="_blank" class="body-link">Customer Account API</a> now includes a <a href="https://shopify.dev/docs/api/customer/2025-07/connections/SubscriptionDiscountConnection" target="_blank" class="body-link">discounts connection</a> on customer subscription contracts, mirroring functionality that already exists in the Admin API.</p>
<p>What's new:</p>
<ul>
<li>Query subscription discount details directly from the Customer Account API.</li>
<li>Access discount types, values, and line-item allocations through the <a href="https://shopify.dev/docs/api/admin-graphql/latest/queries/subscriptioncontract#returns-SubscriptionContract.fields.discounts" target="_blank" class="body-link">discounts</a> field returned by the <code>SubscriptionContract</code> query.</li>
<li>No changes to existing Admin API functionality.</li>
</ul>
<p>How to use it:
You can now examine subscription discounts in customer storefronts using the <code>discounts</code> field on subscription contracts. This returns the same discount information available through the Admin API, including:</p>
<ul>
<li>Discount amounts and percentages</li>
<li>Which subscription lines the discounts apply to</li>
<li>Discount allocation details</li>
</ul>
<p>This enhancement enables the creation of more comprehensive subscription management experiences, allowing customers to see precisely how discounts affect their subscription pricing.</p>
<p>Learn more</p>
<ul>
<li><a href="https://shopify.dev/docs/api/customer/unstable/connections/SubscriptionDiscountConnection" target="_blank" class="body-link"><code>SubscriptionDiscountConnection</code> documentation</a></li>
<li><a href="https://shopify.dev/docs/api/customer" target="_blank" class="body-link">GraphQL Customer Account API overview</a></li>
</ul>
</div> ]]></description>
    <pubDate>Tue, 01 Jul 2025 16:00:00 +0000</pubDate>
    <atom:published>2025-07-01T16:00:00.000Z</atom:published>
    <atom:updated>2025-07-01T16:00:00.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <category>Customer Account API</category>
    <category>2025-07</category>
    <link>https://shopify.dev/changelog/subscription-discounts-are-now-available-in-the-customer-api</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/subscription-discounts-are-now-available-in-the-customer-api</guid>
  </item>
  <item>
    <title>New warning `DraftOrderMarketRegionCountryCodeNotSupportedWarning` added to `DraftOrder`</title>
    <description><![CDATA[ <div class=""><p>We've added a new new type of warning to the <a href="https://shopify.dev/docs/api/admin-graphql/2025-07/objects/DraftOrder" target="_blank" class="body-link"><code>DraftOrder</code> object</a>: <a href="https://shopify.dev/docs/api/admin-graphql/2025-07/objects/draftordermarketregioncountrycodenotsupportedwarning" target="_blank" class="body-link"><code>DraftOrderMarketRegionCountryCodeNotSupportedWarning</code></a>.</p>
<p>The <a href="https://shopify.dev/docs/api/admin-graphql/2025-07/input-objects/DraftOrderInput#fields-marketRegionCountryCode" target="_blank" class="body-link"><code>marketRegionCountryCode</code> field</a> is deprecated and does not affect draft orders on shops that use <a href="https://www.shopify.com/markets" target="_blank" class="body-link">Markets</a>. Because of this, the <code>DraftOrderMarketRegionCountryCodeNotSupportedWarning</code> warning indicates that the <code>marketRegionCountryCode</code> field was set when creating, calculating, or updating a draft order on a shop that uses Markets.</p>
</div> ]]></description>
    <pubDate>Tue, 01 Jul 2025 16:00:00 +0000</pubDate>
    <atom:published>2025-07-01T16:00:00.000Z</atom:published>
    <atom:updated>2025-07-01T16:00:00.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <category>Admin GraphQL API</category>
    <category>2025-07</category>
    <link>https://shopify.dev/changelog/new-warning-draftordermarketregioncountrycodenotsupportedwarning-added-to-draftorder</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/new-warning-draftordermarketregioncountrycodenotsupportedwarning-added-to-draftorder</guid>
  </item>
  <item>
    <title>Add created/updated at time based filters for an order's fulfillments</title>
    <description><![CDATA[ <div class=""><p>As of API version <code>2025-07</code> you can now narrow the list of fulfillments returned by <a href="https://shopify.dev/docs/api/admin-graphql/unstable/queries/order#returns-Order.fields.fulfillments" target="_blank" class="body-link"><code>Order.fulfillments</code></a> with an optional query argument that targets created_at and/or updated_at fields. The argument uses the same search syntax already familiar from other Admin API endpoints, for example:</p>
<pre><code>fulfillments(query: &quot;created_at:'2025-05-07T08:37:00Z'&quot;)
fulfillments(query: &quot;created_at:&gt;='2025-05-07T00:00:00Z' updated_at:&lt;'2025-05-09T00:00:00Z'&quot;)
</code></pre>
<p>The field still returns a simple array—no pagination cursor needed—and behaves exactly as before if you omit <code>query</code>.</p>
</div> ]]></description>
    <pubDate>Tue, 01 Jul 2025 16:00:00 +0000</pubDate>
    <atom:published>2025-07-01T16:00:00.000Z</atom:published>
    <atom:updated>2025-07-01T16:00:00.000Z</atom:updated>
    <category>API</category>
    <category>Update</category>
    <category>Admin GraphQL API</category>
    <category>2025-07</category>
    <link>https://shopify.dev/changelog/add-createdupdated-at-time-based-filters-for-an-orders-fulfillments</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/add-createdupdated-at-time-based-filters-for-an-orders-fulfillments</guid>
  </item>
  <item>
    <title>New field for discount classes on `DraftOrderPlatformDiscount`</title>
    <description><![CDATA[ <div class=""><p>The <code>discountClass</code> field in the <code>DraftOrderPlatformDiscount</code> object has been deprecated. Please use the <code>discountClasses</code> field instead, which allows for the representation of multiple discount classes associated with the backing price rule of the <code>DraftOrderPlatformDiscount</code>. </p>
<p>To determine the specific impact of a <code>DraftOrderPlatformDiscount</code> on a draft order, continue using the <a href="https://shopify.dev/docs/api/admin-graphql/2025-07/objects/DraftOrderPlatformDiscount#field-presentationlevel" target="_blank" class="body-link"><code>presentationLevel</code></a> field.</p>
</div> ]]></description>
    <pubDate>Tue, 01 Jul 2025 16:00:00 +0000</pubDate>
    <atom:published>2025-07-01T16:00:00.000Z</atom:published>
    <atom:updated>2025-07-01T16:00:00.000Z</atom:updated>
    <category>Action Required</category>
    <category>API</category>
    <category>Deprecation announcement</category>
    <category>Admin GraphQL API</category>
    <category>2025-07</category>
    <link>https://shopify.dev/changelog/new-field-for-discount-classes-on-draftorderplatformdiscount</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/new-field-for-discount-classes-on-draftorderplatformdiscount</guid>
  </item>
  <item>
    <title>New range fields available for segment filters in GraphQL Admin API</title>
    <description><![CDATA[ <div class=""><p>You can now access minimum and maximum range values for segment filters through the GraphQL Admin API. The new <code>minRange</code> and <code>maxRange</code> fields are available on integer and float segment filters, and event segment filter parameters.</p>
<p>These new fields help you understand the valid range of values that can be used for customer segmentation. The fields are available on the following filter types:</p>
<ul>
<li><a href="https://shopify.dev/docs/api/admin-graphql/2025-07/objects/segmentintegerfilter" target="_blank" class="body-link">SegmentIntegerFilter</a></li>
<li><a href="https://shopify.dev/docs/api/admin-graphql/2025-07/objects/segmentfloatfilter" target="_blank" class="body-link">SegmentFloatFilter</a></li>
<li><a href="https://shopify.dev/docs/api/admin-graphql/2025-07/objects/segmenteventfilterparameter" target="_blank" class="body-link">SegmentEventFilterParameter</a></li>
</ul>
<p>Example query:</p>
<pre><code class="language-graphql">query {
  segmentFilters(first: 50) {
    edges {
      node {
        ... on SegmentIntegerFilter {
          minRange
          maxRange
        }
        ... on SegmentFloatFilter {
          minRange
          maxRange
        }
        ... on SegmentEventFilter {
          parameters {
            minRange
            maxRange
          }
        }
      }
    }
  }
}
</code></pre>
</div> ]]></description>
    <pubDate>Tue, 01 Jul 2025 16:00:00 +0000</pubDate>
    <atom:published>2025-07-01T16:00:00.000Z</atom:published>
    <atom:updated>2025-07-01T16:00:00.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <category>Admin GraphQL API</category>
    <category>2025-07</category>
    <link>https://shopify.dev/changelog/new-range-fields-available-for-segment-filters-in-graphql-admin-api</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/new-range-fields-available-for-segment-filters-in-graphql-admin-api</guid>
  </item>
  <item>
    <title>New AppUninstall mutation to allow apps to uninstall themselves.</title>
    <description><![CDATA[ <div class=""><p>Third-party apps can now uninstall themselves from merchant stores using a new public AppUninstall GraphQL mutation.</p>
<p>The mutation serves as a GraphQL equivalent to the existing <a href="https://shopify.dev/docs/apps/build/authentication-authorization/app-installation/uninstall-app-api-request#examples" target="_blank" class="body-link">REST endpoint for app uninstallation</a>.</p>
<p>For implementation details and examples, please refer to our <a href="https://shopify.dev/docs/api/admin-graphql/unstable/mutations/appuninstall" target="_blank" class="body-link">API documentation</a>.</p>
</div> ]]></description>
    <pubDate>Tue, 01 Jul 2025 13:00:00 +0000</pubDate>
    <atom:published>2025-07-01T13:00:00.000Z</atom:published>
    <atom:updated>2025-07-01T13:00:00.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <category>Admin GraphQL API</category>
    <category>2025-07</category>
    <link>https://shopify.dev/changelog/new-appuninstall-mutation-to-allow-apps-to-uninstall-themselves</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/new-appuninstall-mutation-to-allow-apps-to-uninstall-themselves</guid>
  </item>
  <item>
    <title>Remove unprocessed exchange lines from a return</title>
    <description><![CDATA[ <div class=""><p>We're introducing the <a href="https://shopify.dev/docs/api/admin-graphql/2025-07/mutations/removeFromReturn" target="_blank" class="body-link"><code>removeFromReturn</code></a> mutation, which allows you to remove unprocessed items from returns efficiently. </p>
<h3>What's new</h3>
<p>This mutation enables the removal of:</p>
<ul>
<li>Return line items</li>
<li>Exchange line items</li>
</ul>
<h3>Replaces previous mutation</h3>
<p>The <code>removeFromReturn</code> mutation supersedes the <a href="https://shopify.dev/docs/api/admin-graphql/2025-07/mutations/returnlineitemremovefromreturn" target="_blank" class="body-link"><code>returnLineItemRemoveFromReturn</code></a> mutation, which was limited to removing only return line items.</p>
<h3>Availability</h3>
<p>Currently available in the <code>unstable</code> GraphQL API version, this mutation will be officially released in version <code>2025-07</code>.</p>
</div> ]]></description>
    <pubDate>Tue, 01 Jul 2025 05:00:00 +0000</pubDate>
    <atom:published>2025-07-01T05:00:00.000Z</atom:published>
    <atom:updated>2025-07-01T05:00:00.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <category>Admin GraphQL API</category>
    <category>2025-07</category>
    <link>https://shopify.dev/changelog/remove-unprocessed-exchange-lines-from-a-return</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/remove-unprocessed-exchange-lines-from-a-return</guid>
  </item>
  <item>
    <title>New GraphQL fields for return management</title>
    <description><![CDATA[ <div class=""><p>We're introducing new fields to help you better manage and track returns:</p>
<h3>Quantity tracking fields</h3>
<p>The following fields are now available on both <code>ExchangeLineItem</code> and <code>ReturnLineItem</code> objects:</p>
<ul>
<li><a href="https://shopify.dev/docs/api/admin-graphql/2025-07/objects/ExchangeLineItem#field-ExchangeLineItem.fields.processedQuantity" target="_blank" class="body-link"><code>processedQuantity</code></a> - Tracks the quantity of a return that has been processed.</li>
<li><a href="https://shopify.dev/docs/api/admin-graphql/2025-07/objects/ExchangeLineItem#field-ExchangeLineItem.fields.processableQuantity" target="_blank" class="body-link"><code>processableQuantity</code></a> - Indicates the quantity ready for processing.</li>
<li><a href="https://shopify.dev/docs/api/admin-graphql/2025-07/objects/ExchangeLineItem#field-ExchangeLineItem.fields.unprocessedQuantity" target="_blank" class="body-link"><code>unprocessedQuantity</code></a> - Shows the remaining unprocessed quantity.</li>
</ul>
<h3>Return timestamps</h3>
<p>You can now retrieve important timestamps for returns:</p>
<ul>
<li><a href="https://shopify.dev/docs/api/admin-graphql/2025-07/objects/Return#field-Return.fields.closedAt" target="_blank" class="body-link"><code>Return.closedAt</code></a> - The timestamp when the return was closed.</li>
<li><a href="https://shopify.dev/docs/api/admin-graphql/2025-07/objects/Return#field-Return.fields.createdAt" target="_blank" class="body-link"><code>Return.createdAt</code></a> - The timestamp when the return was created.</li>
<li><a href="https://shopify.dev/docs/api/admin-graphql/2025-07/objects/Return#field-Return.fields.requestApprovedAt" target="_blank" class="body-link"><code>Return.requestApprovedAt</code></a> - The timestamp when the return request was approved.</li>
<li><a href="https://shopify.dev/docs/api/admin-graphql/2025-07/objects/ReverseFulfillmentOrderDisposition#field-ReverseFulfillmentOrderDisposition.fields.createdAt" target="_blank" class="body-link"><code>ReverseFulfillmentOrderDisposition.createdAt</code></a> - The timestamp when the disposition was created.</li>
</ul>
<h3>Breaking change</h3>
<p><strong><code>ExchangeLineItem.lineItem</code> is now deprecated.</strong> Please use <a href="/docs/api/admin-graphql/2025-07/objects/ExchangeLineItem#field-ExchangeLineItem.fields.lineItems" target="_blank" class="body-link"><code>ExchangeLineItem.lineItems</code></a> instead. If an exchange line item has been processed multiple times, it will have multiple associated line items. The <code>lineItem</code> field will only return the first associated line item.</p>
<h3>Availability</h3>
<p>These fields officially launched in API version <code>2025-07</code>.</p>
</div> ]]></description>
    <pubDate>Tue, 01 Jul 2025 05:00:00 +0000</pubDate>
    <atom:published>2025-07-01T05:00:00.000Z</atom:published>
    <atom:updated>2025-07-01T05:00:00.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <category>Admin GraphQL API</category>
    <category>2025-07</category>
    <link>https://shopify.dev/changelog/new-graphql-fields-for-return-management</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/new-graphql-fields-for-return-management</guid>
  </item>
  <item>
    <title>Returns Processing APIs replaces Return Refund APIs</title>
    <description><![CDATA[ <div class=""><p>As <a href="https://shopify.dev/changelog/deprecation-of-legacy-return-apis-and-improvements-to-return-management" target="_blank" class="body-link">announced previously</a>, we're introducing important changes to simplify and enhance return management in the Shopify Admin API.</p>
<h2>What's changing?</h2>
<ul>
<li>The <a href="https://shopify.dev/docs/api/admin-graphql/2025-07/mutations/returnRefund" target="_blank" class="body-link"><code>returnRefund</code></a> mutation is deprecated and replaced by the new <a href="https://shopify.dev/docs/api/admin-graphql/2025-07/mutations/returnProcess" target="_blank" class="body-link"><code>returnProcess</code></a> mutation. The <a href="https://shopify.dev/docs/api/admin-graphql/2025-07/mutations/returnProcess" target="_blank" class="body-link"><code>returnProcess</code></a> mutation streamlines return lifecycle management by combining disposition decisions and financial processing into a single call.</li>
<li>The field <a href="https://shopify.dev/docs/api/admin-graphql/2025-07/objects/suggestedReturnRefund" target="_blank" class="body-link"><code>Return.suggestedReturnRefund</code></a> is deprecated in favor of the new <a href="https://shopify.dev/docs/api/admin-graphql/2025-07/objects/SuggestedReturnFinancialOutcome" target="_blank" class="body-link"><code>Return.suggestedFinancialOutcome</code></a> field.</li>
<li>Exchange fulfillment orders are now created only when exchange line items are processed, ensuring accuracy.</li>
<li>Refunds and return processing now offer enhanced precision for managing returned line items.</li>
<li>Only exchanges with a net payable balance due by the buyer are placed on hold with <code>AWAITING_PAYMENT</code> hold reason.</li>
</ul>
<p><strong>Action required:</strong><br>If your app currently creates returns using <a href="https://shopify.dev/docs/api/admin-graphql/2025-07/mutations/returnCreate" target="_blank" class="body-link"><code>returnCreate</code></a> or approves return requests using <a href="https://shopify.dev/docs/api/admin-graphql/2025-07/mutations/returnApproveRequest" target="_blank" class="body-link"><code>returnApproveRequest</code></a>, migrate to the new <a href="https://shopify.dev/docs/api/admin-graphql/2025-07/mutations/returnProcess" target="_blank" class="body-link"><code>returnProcess</code></a> mutation to handle refunds and exchanges. The older mutations (<a href="https://shopify.dev/docs/api/admin-graphql/2025-07/mutations/refundCreate" target="_blank" class="body-link"><code>refundCreate</code></a>, <a href="https://shopify.dev/docs/api/admin-graphql/2025-07/mutations/returnRefund" target="_blank" class="body-link"><code>returnRefund</code></a>) and the query field (<a href="https://shopify.dev/docs/api/admin-graphql/2025-07/objects/suggestedRefund" target="_blank" class="body-link"><code>Return.suggestedRefund</code></a>) are deprecated. Instead, you should now use <a href="https://shopify.dev/docs/api/admin-graphql/2025-07/mutations/returnProcess" target="_blank" class="body-link"><code>returnProcess</code></a> and <a href="https://shopify.dev/docs/api/admin-graphql/2025-07/objects/SuggestedReturnFinancialOutcome" target="_blank" class="body-link"><code>Return.suggestedFinancialOutcome</code></a>.</p>
<p><strong>Availability:</strong><br>These new APIs officially launched in API version <code>2025-07</code>.</p>
<p>For more details, see our updated <a href="https://shopify.dev/docs/apps/build/orders-fulfillment/returns-apps/migrate-to-return-processing" target="_blank" class="body-link">migration guide</a>.</p>
</div> ]]></description>
    <pubDate>Tue, 01 Jul 2025 05:00:00 +0000</pubDate>
    <atom:published>2025-07-01T05:00:00.000Z</atom:published>
    <atom:updated>2025-07-01T05:00:00.000Z</atom:updated>
    <category>API</category>
    <category>Breaking API Change</category>
    <category>Admin GraphQL API</category>
    <category>2025-07</category>
    <link>https://shopify.dev/changelog/returns-processing-api</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/returns-processing-api</guid>
  </item>
  <item>
    <title>Increase draft order line item limit from `250` to `499`</title>
    <description><![CDATA[ <div class=""><p>In API version <code>2025-07</code>, the maximum number of line items accepted by the draft order <a href="https://shopify.dev/docs/api/admin-graphql/2025-07/mutations/draftOrderCreate" target="_blank" class="body-link">create</a> and <a href="https://shopify.dev/docs/api/admin-graphql/2025-07/mutations/draftOrderUpdate" target="_blank" class="body-link">update</a> mutations have been increased from <code>250</code> to <code>499</code>. This change ensures that the GraphQL API now matches the REST API's limit.</p>
</div> ]]></description>
    <pubDate>Mon, 30 Jun 2025 17:00:00 +0000</pubDate>
    <atom:published>2025-06-30T17:00:00.000Z</atom:published>
    <atom:updated>2025-06-30T17:00:00.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <category>Admin GraphQL API</category>
    <category>2025-07</category>
    <link>https://shopify.dev/changelog/draft-order-line-item-limit</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/draft-order-line-item-limit</guid>
  </item>
  <item>
    <title>Removed tax-related fields from the `ShopFeatures` object</title>
    <description><![CDATA[ <div class=""><p>The <code>EligibleForShopifyTaxReporting</code> and <code>ShopifyTaxReportingLegacyAutoTaxMigrated</code> fields have been removed from the <code>ShopFeatures</code> object as it is no longer utilized in Shopify tax reporting. There are no replacements for these fields for external-facing apps. If you rely on these fields, you should update your integration accordingly.</p>
</div> ]]></description>
    <pubDate>Mon, 30 Jun 2025 16:00:00 +0000</pubDate>
    <atom:published>2025-06-30T16:00:00.000Z</atom:published>
    <atom:updated>2025-06-30T16:00:00.000Z</atom:updated>
    <category>Action Required</category>
    <category>API</category>
    <category>Breaking API Change</category>
    <category>Admin GraphQL API</category>
    <category>2025-10</category>
    <link>https://shopify.dev/changelog/removed-tax-related-fields-from-the-shopfeatures-object</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/removed-tax-related-fields-from-the-shopfeatures-object</guid>
  </item>
  <item>
    <title>New `estimatedShippedAt` argument added to FulfillmentOrderAcceptFulfillmentRequest mutation</title>
    <description><![CDATA[ <div class=""><p>As of API version 2025-07, fulfillment service apps can use the new <code>estimatedShippedAt</code> argument to specify when they estimate the fulfillment order to become fulfilled. Shopify Fulfillment Network partners will be expected to provide this value when accepting Fulfillment Requests.</p>
<p><a href="https://shopify.dev/docs/api/admin-graphql/2025-07/mutations/fulfillmentorderacceptfulfillmentrequest#arguments-estimatedShippedAt" target="_blank" class="body-link"><code>estimatedShippedAt</code></a></p>
</div> ]]></description>
    <pubDate>Mon, 30 Jun 2025 16:00:00 +0000</pubDate>
    <atom:published>2025-06-30T16:00:00.000Z</atom:published>
    <atom:updated>2025-06-30T16:00:00.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <category>Admin GraphQL API</category>
    <category>2025-07</category>
    <link>https://shopify.dev/changelog/new-estimatedshippedat-argument-added-to-fulfillmentorderacceptfulfillmentrequest-mutation</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/new-estimatedshippedat-argument-added-to-fulfillmentorderacceptfulfillmentrequest-mutation</guid>
  </item>
  <item>
    <title>Image alt text can now be translated</title>
    <description><![CDATA[ <div class=""><p>Starting with API version 2025-10, image alt text will be exposed as a <a href="https://shopify.dev/docs/api/admin-graphql/2025-10/enums/TranslatableResourceType" target="_blank" class="body-link"><code>TranslatableResourceType</code></a>. This means that image alt text surfaced to the buyer will be eligible for translation through the <a href="https://help.shopify.com/en/manual/international/localization-and-translation" target="_blank" class="body-link">Translations API</a>.</p>
</div> ]]></description>
    <pubDate>Sun, 29 Jun 2025 13:00:00 +0000</pubDate>
    <atom:published>2025-06-29T13:00:00.000Z</atom:published>
    <atom:updated>2026-01-23T19:50:18.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <category>Admin GraphQL API</category>
    <category>Liquid</category>
    <category>2025-10</category>
    <link>https://shopify.dev/changelog/mark-image-alt-text-as-translatable</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/mark-image-alt-text-as-translatable</guid>
  </item>
  <item>
    <title>Deprecation of POST requests without a Content-Length or Transfer-Encoding: chunked header</title>
    <description><![CDATA[ <div class=""><p>We're making changes to our HTTP/1.0 and HTTP/1.1 request handling to improve security and compliance with web standards. Starting August 1, 2025, all POST requests to Shopify APIs must include either a Content-Length header or Transfer-Encoding: chunked header, or they'll return an HTTP 411 error.</p>
<p><strong>What you need to do</strong></p>
<p>Update your client libraries and API integrations to ensure all POST requests include one of these headers:</p>
<ul>
<li><code>Content-Length</code>: Specifies the exact size of the request body in bytes</li>
<li><code>Transfer-Encoding: chunked</code>: Indicates the request body is sent in chunks</li>
</ul>
<p>Most modern HTTP client libraries automatically include these headers, but some custom implementations or older libraries might not.</p>
<p><strong>Why we're making this change</strong></p>
<p>This change aligns with HTTP/1.1 standards (RFC 7230) and helps prevent potential security vulnerabilities related to request smuggling attacks. It ensures consistent request handling across our infrastructure.</p>
</div> ]]></description>
    <pubDate>Sat, 28 Jun 2025 16:00:00 +0000</pubDate>
    <atom:published>2025-06-28T16:00:00.000Z</atom:published>
    <atom:updated>2025-06-28T16:00:00.000Z</atom:updated>
    <category>Action Required</category>
    <category>API</category>
    <category>Deprecation announcement</category>
    <category>Admin GraphQL API</category>
    <category>Admin REST API</category>
    <category>Customer Account API</category>
    <category>Payments Apps API</category>
    <category>Storefront API</category>
    <category>Events &amp; webhooks</category>
    <link>https://shopify.dev/changelog/deprecation-of-post-requests-without-a-content-length-or-transfer-encoding-chunked-header</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/deprecation-of-post-requests-without-a-content-length-or-transfer-encoding-chunked-header</guid>
  </item>
  <item>
    <title>Buy Button JS must be upgraded to the latest version</title>
    <description><![CDATA[ <div class=""><p>Last year, we announced the deprecation of the <a href="https://shopify.dev/changelog/deprecation-of-checkout-apis" target="_blank" class="body-link">Checkout APIs</a>, which Buy Button JS is dependent on. As part of this deprecation, checkout functionality will stop working on older versions of Buy Button JS on August 1, 2025 11:00 AM ET. To maintain functionality for customers to complete purchases, ensure that your app or storefront is on the latest major version of <a href="https://shopify.dev/docs/storefronts/headless/additional-sdks/buy-button#using-the-latest-version" target="_blank" class="body-link">Buy Button JS (v3.0)</a>.</p>
<p>For documentation on how to update your Buy Button JS code, refer to the <a href="https://shopify.dev/docs/storefronts/headless/additional-sdks/buy-button#using-the-latest-version" target="_blank" class="body-link">developer docs</a>.</p>
<p>**Critical Deadline: August 1, 2025 11:00 AM ET. **You must update by this date or customers will not be able to complete purchases. </p>
</div> ]]></description>
    <pubDate>Fri, 27 Jun 2025 17:30:00 +0000</pubDate>
    <atom:published>2025-06-27T17:30:00.000Z</atom:published>
    <atom:updated>2025-06-27T18:10:06.000Z</atom:updated>
    <category>Action Required</category>
    <category>API</category>
    <category>Deprecation announcement</category>
    <link>https://shopify.dev/changelog/buy-button-js-must-be-upgraded-to-the-latest-version</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/buy-button-js-must-be-upgraded-to-the-latest-version</guid>
  </item>
  <item>
    <title>Add shop_id to app/scopes_update webhook payload</title>
    <description><![CDATA[ <div class=""><p>When you update your app's scopes, the <a href="https://shopify.dev/docs/api/webhooks/latest?reference=toml&accordionItem=webhooks-app-scopes_update" target="_blank" class="body-link"><code>app/scopes_updates</code> webhook payload</a> now includes the shop ID (<code>shop_id</code>).</p>
</div> ]]></description>
    <pubDate>Fri, 27 Jun 2025 16:00:00 +0000</pubDate>
    <atom:published>2025-06-27T16:00:00.000Z</atom:published>
    <atom:updated>2025-07-30T14:07:53.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <category>Events &amp; webhooks</category>
    <category>2025-07</category>
    <link>https://shopify.dev/changelog/add-shopid-to-appscopesupdate-webhook-payload</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/add-shopid-to-appscopesupdate-webhook-payload</guid>
  </item>
  <item>
    <title>Optional `groupObjects` argument in bulk operations mutations that offers faster and more reliable job execution</title>
    <description><![CDATA[ <div class=""><p>We've introduced a new <code>groupObjects</code> argument to <code>bulkOperationRunQuery</code> and <code>bulkOperationRunMutation</code> mutations in the GraphQL Admin API that allow clients optionally to disable grouping and benefit from faster and more reliable bulk operation job runs.</p>
<p>The JSONL output file that GraphQL Admin API bulk operations jobs generate by default places child objects directly below their corresponding parent objects. Ensuring such grouping is costly and results in slower job run and increases chances of job timeout. </p>
<p>If you do not need grouping in the JSONL output, set <code>groupObjects</code> to <code>false</code> to benfit from faster and more reliable bulk operation jobs.</p>
</div> ]]></description>
    <pubDate>Fri, 27 Jun 2025 16:00:00 +0000</pubDate>
    <atom:published>2025-06-27T16:00:00.000Z</atom:published>
    <atom:updated>2025-06-27T16:00:00.000Z</atom:updated>
    <category>API</category>
    <category>Update</category>
    <category>Admin GraphQL API</category>
    <category>2025-07</category>
    <link>https://shopify.dev/changelog/optional-groupobjects-argument-in-bulk-operations-mutations-that-offers-faster-and-more-reliable-job-execution</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/optional-groupobjects-argument-in-bulk-operations-mutations-that-offers-faster-and-more-reliable-job-execution</guid>
  </item>
  <item>
    <title>New Liquid filter for displaying unit prices</title>
    <description><![CDATA[ <div class=""><p>You can now use the new <a href="https://shopify.dev/docs/api/liquid/filters/unit_price_with_measurement" target="_blank" class="body-link"><code>unit_price_with_measurement</code> filter</a> to display unit prices in the customer's language, enhancing user experience and simplifying theme code. </p>
<p>Note: Unit prices are available only for stores located in the European Union (EU) or Switzerland. To add unit prices to products, you can do so <a href="https://help.shopify.com/en/manual/products/details/product-pricing/unit-pricing" target="_blank" class="body-link">through Shopify admin</a>.</p>
<p>For detailed instructions on how to display unit prices in your theme, please refer to the <a href="https://shopify.dev/docs/storefronts/themes/pricing-payments/unit-pricing" target="_blank" class="body-link">unit pricing documentation</a>.</p>
</div> ]]></description>
    <pubDate>Wed, 25 Jun 2025 16:00:00 +0000</pubDate>
    <atom:published>2025-06-25T16:00:00.000Z</atom:published>
    <atom:updated>2025-06-25T16:00:00.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <category>Liquid</category>
    <link>https://shopify.dev/changelog/new-liquid-filter-for-displaying-unit-prices</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/new-liquid-filter-for-displaying-unit-prices</guid>
  </item>
  <item>
    <title>Standardized target and operation names across Function APIs </title>
    <description><![CDATA[ <div class=""><p>We’ve standardized target and operation names in the <a href="https://shopify.dev/docs/api/functions/2025-07/cart-transform" target="_blank" class="body-link">Cart Transform</a>, <a href="https://shopify.dev/docs/api/functions/2025-07/delivery-customization" target="_blank" class="body-link">Delivery Customization</a>, <a href="https://shopify.dev/docs/api/functions/2025-07/fulfillment-constraints" target="_blank" class="body-link">Fulfillment Constraints</a>, <a href="https://shopify.dev/docs/api/functions/2025-07/order-routing-location-rule" target="_blank" class="body-link">Order Routing</a>, <a href="https://shopify.dev/docs/api/functions/2025-07/payment-customization" target="_blank" class="body-link">Payment Customization</a>, <a href="https://shopify.dev/docs/api/functions/2025-07/cart-and-checkout-validation" target="_blank" class="body-link">Cart and Checkout Validation</a> APIs for better consistency and extensibility. The Cart and Checkout Validation API now returns operations like other Function APIs. Please note that these changes will only affect functions using version 2025-07 and later. </p>
<p>Unchanged APIs:  </p>
<ul>
<li>Discount, Order Discount, Product Discount, Shipping Discount and Discounts Allocator</li>
<li>Local Pickup and Pickup Point Generator</li>
</ul>
<h2>New target names</h2>
<p>| Function API                            | Previous target name                          | New target name                             |
|</p>
</div> ]]></description>
    <pubDate>Mon, 23 Jun 2025 21:45:00 +0000</pubDate>
    <atom:published>2025-06-23T21:45:00.000Z</atom:published>
    <atom:updated>2025-06-24T00:48:11.000Z</atom:updated>
    <category>API</category>
    <category>Update</category>
    <category>Functions</category>
    <category>2025-07</category>
    <link>https://shopify.dev/changelog/standardized-target-and-operation-names-across-function-apis</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/standardized-target-and-operation-names-across-function-apis</guid>
  </item>
  <item>
    <title>Shop metafield definitions are now available in the Shopify Admin and Admin API</title>
    <description><![CDATA[ <div class=""><p>Shop metafield definitions and values are now be exposed in the Shopify Admin UI, making them more accessible and manageable by merchants. </p>
<p>Additionally, it's now possible to query for shop metafield definitions using the <a href="https://shopify.dev/docs/api/admin-graphql/latest/queries/metafieldDefinitions" target="_blank" class="body-link"><code>metafieldDefinitions</code> query</a> in the Admin GraphQL API. </p>
<p>Shop is already <a href="https://shopify.dev/docs/api/admin-graphql/latest/enums/MetafieldOwnerType" target="_blank" class="body-link">a supported metafield owner type</a>, and this change enables apps and merchants to manage definitions for shop-level metafields.</p>
</div> ]]></description>
    <pubDate>Mon, 23 Jun 2025 19:00:00 +0000</pubDate>
    <atom:published>2025-06-23T19:00:00.000Z</atom:published>
    <atom:updated>2025-06-23T19:00:00.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <category>Admin GraphQL API</category>
    <category>2025-07</category>
    <link>https://shopify.dev/changelog/shop-metafield-now-in-admin</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/shop-metafield-now-in-admin</guid>
  </item>
  <item>
    <title>Use `cart.deliveryGroups.groupType` in Function APIs to determine the type of delivery group</title>
    <description><![CDATA[ <div class=""><p>With the 2025-07 version release of the Function APIs, you can now use the <code>cart.deliveryGroups.groupType</code> to determine the type of delivery group. The <code>groupType</code> field indicates whether the delivery is a one-time purchase (<code>ONE_TIME_PURCHASE</code>) or part of a recurring subscription (<code>SUBSCRIPTION</code>).</p>
<p>Delivery groups streamline fulfillment by organizing items that can be shipped together, based on the customer's shipping address. For example, if a customer orders a t-shirt and a pair of shoes that can be shipped together, then the items are included in the same delivery group.</p>
</div> ]]></description>
    <pubDate>Mon, 23 Jun 2025 16:00:00 +0000</pubDate>
    <atom:published>2025-06-23T16:00:00.000Z</atom:published>
    <atom:updated>2025-06-23T16:00:00.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <category>Functions</category>
    <category>2025-07</category>
    <link>https://shopify.dev/changelog/use-cartdeliverygroupsgrouptype-in-function-apis-to-determine-the-type-of-delivery-group</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/use-cartdeliverygroupsgrouptype-in-function-apis-to-determine-the-type-of-delivery-group</guid>
  </item>
  <item>
    <title>Cart metafields are accessible in Shopify Functions and Checkout UI extensions</title>
    <description><![CDATA[ <div class=""><p>You can now read cart metafields in the <a href="https://shopify.dev/docs/api/functions/2025-07/cart-and-checkout-validation#Input.fields.cart.metafield" target="_blank" class="body-link">GraphQL input query</a> for Shopify Functions. Checkout UI extensions can also read and write cart metafields for abandoned carts, order edits, and draft orders, in addition to previously supported resources. Notably, cart metafields are carried over to abandoned carts for later use.</p>
<p>For security, use a reserved namespace to ensure only your app can access specific cart metafields.</p>
<p><strong>Note</strong>: If you modify cart metafields using the <a href="https://shopify.dev/docs/api/storefront/2025-07/mutations/cartMetafieldsSet" target="_blank" class="body-link"><code>cartMetafieldsSet</code></a> or <a href="https://shopify.dev/docs/api/storefront/2025-07/mutations/cartMetafieldDelete" target="_blank" class="body-link"><code>cartMetafieldDelete</code></a> mutations, then the changes won't be available to Shopify Functions until the buyer goes to checkout or performs another cart action that triggers the function.</p>
<p><strong>Example: Read a cart metafield in a function input query</strong></p>
<pre><code>query RunInput {
  cart {
    myCartMetafield: metafield(namespace: &quot;myNamespace&quot;, key: &quot;myCartMetafield&quot;) {
      value
    }
  }
}
</code></pre>
</div> ]]></description>
    <pubDate>Fri, 20 Jun 2025 21:38:00 +0000</pubDate>
    <atom:published>2025-06-20T21:38:00.000Z</atom:published>
    <atom:updated>2025-06-24T21:01:47.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <category>Functions</category>
    <category>2025-07</category>
    <link>https://shopify.dev/changelog/cart-metafields-are-accessible-in-shopify-functions-and-checkout-ui-extensions</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/cart-metafields-are-accessible-in-shopify-functions-and-checkout-ui-extensions</guid>
  </item>
  <item>
    <title>Order editing workflows now offer direct session access via mutation arguments and return fields</title>
    <description><![CDATA[ <div class=""><p>In API version 2025-10, we've enhanced order editing workflows, making them more flexible and improving traceability features. These updates expand mutation ID compatibility and add session details to return fields, making it easier to track and manage order editing sessions.</p>
<h2>What's New</h2>
<h3>Direct order edit session access</h3>
<p>Now, you can directly access order edit sessions through the <code>id</code> field on the <a href="https://shopify.dev/docs/api/admin-graphql/2025-10/objects/OrderEditSession" target="_blank" class="body-link">OrderEditSession</a> object, enhancing the tracking of changes throughout your order editing workflow.</p>
<h3>Enhanced mutation ID flexibility</h3>
<p>Order editing mutations now accept IDs from both <a href="https://shopify.dev/docs/api/admin-graphql/2025-10/objects/CalculatedOrder" target="_blank" class="body-link"><code>CalculatedOrder</code></a> and <a href="https://shopify.dev/docs/api/admin-graphql/2025-10/objects/OrderEditSession" target="_blank" class="body-link"><code>OrderEditSession</code></a> objects. This enhancement provides greater flexibility in your application architecture by supporting different workflows based on session context.</p>
<p><strong>Affected mutations:</strong></p>
<ul>
<li><a href="https://shopify.dev/docs/api/admin-graphql/2025-10/mutations/orderEditUpdateShippingLine" target="_blank" class="body-link"><code>OrderEditAddCustomItem</code></a></li>
<li><a href="https://shopify.dev/docs/api/admin-graphql/2025-10/mutations/orderEditAddLineItemDiscount" target="_blank" class="body-link"><code>OrderEditAddLineItemDiscount</code></a></li>
<li><a href="https://shopify.dev/docs/api/admin-graphql/2025-10/mutations/orderEditAddShippingLine" target="_blank" class="body-link"><code>OrderEditAddShippingLine</code></a></li>
<li><a href="https://shopify.dev/docs/api/admin-graphql/2025-10/mutations/orderEditAddVariant" target="_blank" class="body-link"><code>OrderEditAddVariant</code></a></li>
<li><a href="https://shopify.dev/docs/api/admin-graphql/2025-10/mutations/orderEditCommit" target="_blank" class="body-link"><code>OrderEditCommit</code></a></li>
<li><a href="https://shopify.dev/docs/api/admin-graphql/2025-10/mutations/orderEditRemoveDiscount" target="_blank" class="body-link"><code>OrderEditRemoveDiscount</code></a></li>
<li><a href="https://shopify.dev/docs/api/admin-graphql/2025-10/mutations/orderEditRemoveShippingLine" target="_blank" class="body-link"><code>OrderEditRemoveShippingLine</code></a></li>
<li><a href="https://shopify.dev/docs/api/admin-graphql/2025-10/mutations/orderEditRemoveLineItemDiscount" target="_blank" class="body-link"><code>OrderEditRemoveLineItemDiscount</code></a></li>
<li><a href="https://shopify.dev/docs/api/admin-graphql/2025-10/mutations/orderEditSetQuantity" target="_blank" class="body-link"><code>OrderEditSetQuantity</code></a></li>
<li><a href="https://shopify.dev/docs/api/admin-graphql/2025-10/mutations/orderEditUpdateDiscount" target="_blank" class="body-link"><code>OrderEditUpdateDiscount</code></a></li>
<li><a href="https://shopify.dev/docs/api/admin-graphql/2025-10/mutations/orderEditUpdateShippingLine" target="_blank" class="body-link"><code>OrderEditUpdateShippingLine</code></a></li>
</ul>
<h3>Expanded return fields</h3>
<p>Order editing mutations now return an <code>orderEditSession</code> field, enabling you to use the session <code>id</code> in subsequent mutation calls for improved workflow continuity. This enhancement applies to all mutations listed above, plus:</p>
<ul>
<li><a href="https://shopify.dev/docs/api/admin-graphql/2025-10/mutations/orderEditBegin" target="_blank" class="body-link">OrderEditBegin</a></li>
</ul>
<p>These improvements provide a more flexible approach to managing order editing workflows while maintaining full traceability of session changes.</p>
</div> ]]></description>
    <pubDate>Thu, 19 Jun 2025 17:00:00 +0000</pubDate>
    <atom:published>2025-06-19T17:00:00.000Z</atom:published>
    <atom:updated>2025-06-19T17:00:00.000Z</atom:updated>
    <category>API</category>
    <category>Update</category>
    <category>Admin GraphQL API</category>
    <category>2025-10</category>
    <link>https://shopify.dev/changelog/order-editing-workflows-now-offer-direct-session-access-via-mutation-arguments-and-return-fields</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/order-editing-workflows-now-offer-direct-session-access-via-mutation-arguments-and-return-fields</guid>
  </item>
  <item>
    <title>Define payment terms conditionally at checkout</title>
    <description><![CDATA[ <div class=""><p>You can now set custom payment terms at checkout using the Payment Customization Function. In addition to renaming, reordering, or hiding payment methods, the new <code>PaymentTermsSetOperation</code> lets you define fixed, net, or event-based payment terms for each order, with optional deposits. Use the Payment Customization Function API to tailor both payment methods and payment terms to fit your business needs.</p>
</div> ]]></description>
    <pubDate>Wed, 18 Jun 2025 16:00:00 +0000</pubDate>
    <atom:published>2025-06-18T16:00:00.000Z</atom:published>
    <atom:updated>2025-06-18T16:00:00.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <category>Functions</category>
    <category>2025-07</category>
    <link>https://shopify.dev/changelog/payment-customization-now-supports-customizing-payment-terms</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/payment-customization-now-supports-customizing-payment-terms</guid>
  </item>
  <item>
    <title>New pagination limits for Liquid &amp; Storefront GraphQL API</title>
    <description><![CDATA[ <div class=""><h2>What's changing</h2>
<p>The Liquid and Storefront GraphQL API now limits pagination of arrays of objects to 25,000 items. This affects:</p>
<ul>
<li>For paginated GraphQL queries (using <code>first</code>, <code>last</code>, <code>before</code>, <code>after</code> parameters), queries will now return an error when paginating past the 25,000th item in the array.</li>
<li>For uses of the <code>paginate</code> tag in Liquid, the last allowed page will be returned when paginating past the 25,000th item in the array.</li>
<li>Any query originating from Liquid or GraphQL for a count will now return a maximum of 25,001 (indicating &quot;more than 25,000&quot;) for arrays with more items.</li>
</ul>
<p>In addition to that:</p>
<ul>
<li>The maximum Liquid page size has been increased from 50 to 250 to match the Storefront GraphQL API limit.</li>
</ul>
<p>The documentation for <a href="https://shopify.dev/docs/storefronts/themes/best-practices/performance/platform#pagination-limits" target="_blank" class="body-link">Liquid</a> and <a href="https://shopify.dev/docs/api/usage/limits#pagination-limits" target="_blank" class="body-link">API usage</a> have been updated to reflect these limits.</p>
<p><strong>Important:</strong> This change only affects the Liquid and Storefront GraphQL API. The Admin GraphQL API continues to support higher limits for merchant facing workflows. See recent changelogs to that effect <a href="https://shopify.dev/changelog/enhanced-variant-query-limits-for-single-product-queries" target="_blank" class="body-link">here</a> and <a href="https://shopify.dev/changelog/uncapped-graphql-counts" target="_blank" class="body-link">here</a>.</p>
<h2>What you need to do</h2>
<p>If your application, storefront, or Liquid theme paginates through more than 25,000 items:</p>
<ul>
<li>Add filters to views to help narrow down results before pagination. For example, filter by product type, price range, or availability.</li>
<li>Update count handling to account for the 25,001 maximum return value and replace it with a human readable value like &quot;More than 25,000 products available.&quot;</li>
</ul>
</div> ]]></description>
    <pubDate>Tue, 17 Jun 2025 16:00:00 +0000</pubDate>
    <atom:published>2025-06-17T16:00:00.000Z</atom:published>
    <atom:updated>2025-06-17T16:00:00.000Z</atom:updated>
    <category>API</category>
    <category>Breaking API Change</category>
    <category>Liquid</category>
    <category>Storefront API</category>
    <link>https://shopify.dev/changelog/new-pagination-limits-for-liquid-storefront-graphql-api</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/new-pagination-limits-for-liquid-storefront-graphql-api</guid>
  </item>
  <item>
    <title>The `_shopify_country` cookie will no longer be set</title>
    <description><![CDATA[ <div class=""><h3>What's changing?</h3>
<p>Starting on August 15th, 2025, Shopify will no longer set the <code>_shopify_country</code> cookie on merchant storefronts or checkout.</p>
<h3>Required updates</h3>
<p>Developers looking to establish the customer's location can use the <a href="https://shopify.dev/docs/api/customer-privacy#check-customer-location" target="_blank" class="body-link">Customer Privacy API's <code>getRegion</code> method</a>, which will be more reliable than the cookie now being removed. </p>
<p>Example JavaScript code:</p>
<pre><code>window.Shopify.loadFeatures([
  {
    name: 'consent-tracking-api',
    version: '0.1',
  },
], function (error) {
  if (error) {
    throw error;
  }
  
  // &quot;CAON&quot;
  let region = window.Shopify.customerPrivacy.getRegion(); 
  // &quot;CA&quot;
  let country = region.slice(0,2); 
});
</code></pre>
</div> ]]></description>
    <pubDate>Mon, 16 Jun 2025 16:00:00 +0000</pubDate>
    <atom:published>2025-06-16T16:00:00.000Z</atom:published>
    <atom:updated>2025-06-16T16:00:00.000Z</atom:updated>
    <category>Themes</category>
    <category>Breaking API Change</category>
    <link>https://shopify.dev/changelog/shopifycountry-cookie-no-longer-set</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/shopifycountry-cookie-no-longer-set</guid>
  </item>
  <item>
    <title>`productCreate` surfaces input errors as `userErrors`</title>
    <description><![CDATA[ <div class=""><p>Starting from 2025-07, the following <code>productCreate</code> input issues will be surfaced as <code>userErrors</code>:</p>
<ul>
<li>Linking multiple options to the same metafield</li>
<li>Linking an option to an already-linked metafield</li>
<li>Attempting to specify <code>linkedMetafieldValue</code> for an option that is not linked to a metafield</li>
<li>Specifying both <code>options</code> and <code>optionValues</code></li>
</ul>
</div> ]]></description>
    <pubDate>Sat, 14 Jun 2025 16:00:00 +0000</pubDate>
    <atom:published>2025-06-14T16:00:00.000Z</atom:published>
    <atom:updated>2025-06-14T16:00:00.000Z</atom:updated>
    <category>API</category>
    <category>Breaking API Change</category>
    <category>Admin GraphQL API</category>
    <category>2025-07</category>
    <link>https://shopify.dev/changelog/product-create-serves-input-errors-as-user-errors</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/product-create-serves-input-errors-as-user-errors</guid>
  </item>
  <item>
    <title>New fields for OrderTransaction and OrderCreateManualPayment</title>
    <description><![CDATA[ <div class=""><p>We've added three new fields to the <code>OrderTransaction</code> object to give you better insights into order processing: <code>device</code>, <code>location</code>, and <code>currency_exchange_adjustment</code>. These fields offer additional context about the point of sale device used, the physical location of the transaction, and any currency exchange adjustments applied.</p>
<p>Additionally, the <code>processed_at</code> field is now available when using the <code>OrderCreateManualPayment</code> mutation. This allows you to specify the exact date and time a manual payment was processed, which is particularly useful for importing transactions from external platforms or applications.</p>
<p>For further details, see <a href="https://shopify.dev/api/admin-graphql/latest/objects/OrderTransaction" target="_blank" class="body-link">OrderTransaction</a> and  <a href="https://shopify.dev/api/admin-graphql/latest/mutations/ordercreatemanualpayment" target="_blank" class="body-link">OrderCreateManualPayment</a>.</p>
</div> ]]></description>
    <pubDate>Fri, 13 Jun 2025 16:00:00 +0000</pubDate>
    <atom:published>2025-06-13T16:00:00.000Z</atom:published>
    <atom:updated>2025-06-13T16:00:00.000Z</atom:updated>
    <category>API</category>
    <category>Update</category>
    <category>Admin GraphQL API</category>
    <category>2025-07</category>
    <link>https://shopify.dev/changelog/added-new-fields-to-transaction-related-objects-and-mutations</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/added-new-fields-to-transaction-related-objects-and-mutations</guid>
  </item>
  <item>
    <title>New `FREE_GIFT_CARD_NOT_ALLOWED` error code for subscription billing attempts</title>
    <description><![CDATA[ <div class=""><p>We’ve added a new error code, <a href="https://shopify.dev/docs/api/admin-graphql/2025-01/enums/SubscriptionBillingAttemptErrorCode#enums-FREE_GIFT_CARD_NOT_ALLOWED" target="_blank" class="body-link"><code>FREE_GIFT_CARD_NOT_ALLOWED</code></a>, to the <code>SubscriptionBillingAttemptErrorCode</code> enum. This error occurs when a subscription contract includes a gift card product with a purchase price of $0, which is not permitted under Shopify’s business rules. </p>
<p>While the situation is rare, this error can occur due to edge cases in dynamic pricing scenarios (for example, bundles or cart transformations could inadvertently set a gift card’s price to zero when part of a subscription contract). Previously, this resulted in a generic error message, making the cause difficult to troubleshoot.</p>
<p><strong>Note</strong>: This error concerns the purchase price of the gift card as a product, not the monetary value loaded onto the card for the gift recipient.</p>
<p>Adding this specific error code improves clarity for Partners and developers, making it easier to diagnose and resolve issues related to subscriptions containing zero-priced gift cards. </p>
<p>This error code has been added to API versions 2025-01 and later. </p>
</div> ]]></description>
    <pubDate>Thu, 12 Jun 2025 16:00:00 +0000</pubDate>
    <atom:published>2025-06-12T16:00:00.000Z</atom:published>
    <atom:updated>2025-06-12T16:29:57.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <category>Admin GraphQL API</category>
    <link>https://shopify.dev/changelog/new-freegiftcardnotallowed-error-code-for-subscription-billing-attempts</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/new-freegiftcardnotallowed-error-code-for-subscription-billing-attempts</guid>
  </item>
  <item>
    <title>Generally available: Standard product review syndication program</title>
    <description><![CDATA[ <div class=""><p>The standard product review syndication program is now available to all partners, officially entering general availability. </p>
<p>Any partner can now build a reviews app that syndicates to the standard product review metaobject, as long as their app meets the program requirements. This enables reviews to be displayed in the Shop app and other surfaces across Shopify. </p>
<p>For documentation and implementation guidelines, refer to the <a href="https://shopify.dev/docs/apps/build/custom-data/metaobjects/standard-review-metaobject" target="_blank" class="body-link">developer docs</a>.</p>
</div> ]]></description>
    <pubDate>Fri, 06 Jun 2025 20:00:00 +0000</pubDate>
    <atom:published>2025-06-06T20:00:00.000Z</atom:published>
    <atom:updated>2025-06-07T00:13:12.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <category>Admin GraphQL API</category>
    <link>https://shopify.dev/changelog/generally-available-standard-product-review-syndication-program</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/generally-available-standard-product-review-syndication-program</guid>
  </item>
  <item>
    <title>`AMAZON_PAY` and `FACEBOOK_PAY` values enumerated in digital wallets</title>
    <description><![CDATA[ <div class=""><p>The <a href="https://shopify.dev/docs/api/storefront/2025-07/enums/DigitalWallet" target="_blank" class="body-link"><code>DigitalWallet</code></a> enum type now includes <code>AMAZON_PAY</code> and <code>FACEBOOK_PAY</code>. For the Storefront and GraphQL Admin QPIs, this update adds Amazon Pay and Facebook Pay (Meta Pay) as enumerated wallets. This change applies to all API versions.</p>
<p>If a query to <a href="https://shopify.dev/docs/api/admin-graphql/2025-07/objects/PaymentSettings#field-supporteddigitalwallets" target="_blank" class="body-link"><code>shop.paymentDetails.supportedDigitalWallets</code></a> returns these values, it means that Meta Pay and/or Amazon Pay wallets are active on the merchant storefront.</p>
<p>This also enables visibility of <code>AMAZON_PAY</code> and <code>FACEBOOK_PAY</code> as values on the <a href="https://shopify.dev/docs/api/admin-graphql/2025-07/objects/CardPaymentDetails#field-wallet" target="_blank" class="body-link"><code>wallet</code></a> field of the <a href="https://shopify.dev/docs/api/admin-graphql/2025-07/objects/CardPaymentDetails" target="_blank" class="body-link"><code>CardPaymentDetails</code></a> object. Previously, transactions using these wallet types would have a null <code>wallet</code> value.</p>
</div> ]]></description>
    <pubDate>Wed, 04 Jun 2025 16:00:00 +0000</pubDate>
    <atom:published>2025-06-04T16:00:00.000Z</atom:published>
    <atom:updated>2025-06-04T16:00:00.000Z</atom:updated>
    <category>API</category>
    <category>Update</category>
    <category>Admin GraphQL API</category>
    <category>Storefront API</category>
    <link>https://shopify.dev/changelog/amazonpay-and-facebookpay-enumerated-in-digitalwallets</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/amazonpay-and-facebookpay-enumerated-in-digitalwallets</guid>
  </item>
  <item>
    <title>Contextual pricing and publishing APIs use backup region fallback</title>
    <description><![CDATA[ <div class=""><p>We're changing the fallback behavior when determining the pricing and publishing that applies to a customer in a specific context. Currently, if a country that doesn't belong to a market is passed as a buyer signal, we use the store defaults. For example, the currency used for pricing will be the store's default currency. With this change, the market for the <code>backupRegion</code> will now be used so currency, catalogs, and other settings from that market will be used when determining pricing and publishing. This fallback matches the behavior on the storefont and allows for consistency in pricing and publishing APIs.  </p>
<p>As of API version 2025-10, the following fields will use<code>backupRegion</code> as a fallback: </p>
<ul>
<li><a href="https://shopify.dev/docs/api/admin-graphql/2025-07/objects/Product#field-contextualPricing" target="_blank" class="body-link"><code>Product.contextualPricing</code></a> </li>
<li><a href="https://shopify.dev/docs/api/admin-graphql/2025-07/objects/productvariant#field-contextualPricing" target="_blank" class="body-link"><code>ProductVariant.contextualPricing</code></a> </li>
<li><a href="https://shopify.dev/docs/api/admin-graphql/2025-07/objects/product#field-publishedInContext" target="_blank" class="body-link"><code>Product.publishedInContext</code></a></li>
</ul>
<p>Previous versions will continue to fallback to store defaults.</p>
</div> ]]></description>
    <pubDate>Sun, 01 Jun 2025 16:00:00 +0000</pubDate>
    <atom:published>2025-06-01T16:00:00.000Z</atom:published>
    <atom:updated>2025-06-16T17:20:13.000Z</atom:updated>
    <category>API</category>
    <category>Breaking API Change</category>
    <category>Admin GraphQL API</category>
    <category>2025-10</category>
    <link>https://shopify.dev/changelog/contextual-pricing-and-publishing-apis-use-backup-region-fallback</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/contextual-pricing-and-publishing-apis-use-backup-region-fallback</guid>
  </item>
  <item>
    <title>Theme files are now installable at the preset level on the Shopify Theme Store</title>
    <description><![CDATA[ <div class=""><p>Installation of individual presets will now match the expectations set by the demo stores in a theme. Previously, only the first preset was installable.</p>
<p><strong>To enable this:</strong></p>
<ol>
<li><a href="https://shopify.dev/docs/storefronts/themes/store/requirements#adding-presets-to-your-theme-zip-submission" target="_blank" class="body-link">Submit your theme files</a> that include <em>/listings</em> folders for approval by the Theme Review Team</li>
<li>Once approved, you’ll receive an email notifying you</li>
<li>Update your listing page details for each preset</li>
<li>Hit submit</li>
</ol>
<p>Once submitted, preset names and their associated listing files will be published to your <em><strong>existing</strong></em> theme details page, making each preset immediately installable when a merchant hits “Try theme”. </p>
<p><strong>Note</strong>: New listing information specific to presets <em><strong>will not</strong></em> be live until dedicated preset listing pages launch in <strong>July</strong> alongside the Theme Store redesign.</p>
</div> ]]></description>
    <pubDate>Mon, 26 May 2025 15:30:00 +0000</pubDate>
    <atom:published>2025-05-26T15:30:00.000Z</atom:published>
    <atom:updated>2025-05-26T15:38:22.000Z</atom:updated>
    <category>Shopify Theme Store</category>
    <category>Update</category>
    <link>https://shopify.dev/changelog/theme-files-are-now-installable-at-the-preset-level-on-the-shopify-theme-store</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/theme-files-are-now-installable-at-the-preset-level-on-the-shopify-theme-store</guid>
  </item>
  <item>
    <title>Add and remove customers from an order with GraphQL</title>
    <description><![CDATA[ <div class=""><p>The Admin GraphQL API now includes <code>orderCustomerRemove</code> (to <a href="https://shopify.dev/docs/api/admin-graphql/2025-07/mutations/ordercustomerremove" target="_blank" class="body-link">remove a customer from an order</a>) and <code>orderCustomerSet</code> (to <a href="https://shopify.dev/docs/api/admin-graphql/2025-07/mutations/orderCustomerSet" target="_blank" class="body-link">add a customer to an order</a>) mutations, making it easier to manage orders and customers. The <code>orderCustomerRemove</code> mutation covers the same use case as setting <a href="https://shopify.dev/docs/api/admin-rest/unstable/resources/order#put-orders-order-id" target="_blank" class="body-link"><code>order.customer: null</code> in the REST API</a>, while <code>orderCustomerSet</code> is all-new functionality not previously possible in GraphQL or REST.</p>
<p>We've also added an <code>Order.number</code> <a href="https://shopify.dev/docs/api/admin-graphql/2025-07/queries/order" target="_blank" class="body-link">field</a>, equivalent to the <a href="https://shopify.dev/docs/api/admin-rest/unstable/resources/order#post-orders" target="_blank" class="body-link"><code>order_number</code> REST field</a>.</p>
</div> ]]></description>
    <pubDate>Fri, 23 May 2025 16:00:00 +0000</pubDate>
    <atom:published>2025-05-23T16:00:00.000Z</atom:published>
    <atom:updated>2025-05-23T16:00:00.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <category>Admin GraphQL API</category>
    <category>2025-07</category>
    <link>https://shopify.dev/changelog/orders-number-and-customer-graphql-update</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/orders-number-and-customer-graphql-update</guid>
  </item>
  <item>
    <title>Shipping Rates – Return backup rates for 3xx and 4xx carrier responses</title>
    <description><![CDATA[ <div class=""><p>Carriers occasionally respond with HTTP 3xx redirects or 4xx client errors. Previously, this left merchants without shipping options at checkout. The rate service now extends its existing error-handling path to treat these responses as recoverable failures. This change triggers a fallback to backup rates instead of resulting in a hard failure. As a result, shoppers still see viable shipping methods, safeguarding conversion and improving overall checkout reliability.</p>
</div> ]]></description>
    <pubDate>Thu, 22 May 2025 16:00:00 +0000</pubDate>
    <atom:published>2025-05-22T16:00:00.000Z</atom:published>
    <atom:updated>2025-05-22T16:00:00.000Z</atom:updated>
    <category>API</category>
    <category>Update</category>
    <category>Admin GraphQL API</category>
    <category>Admin REST API</category>
    <link>https://shopify.dev/changelog/shipping-rates-return-backup-rates-for-3xx-and-4xx-carrier-responses</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/shipping-rates-return-backup-rates-for-3xx-and-4xx-carrier-responses</guid>
  </item>
  <item>
    <title>The Storefront API's Cart object now exposes warnings for non-applicable discount codes</title>
    <description><![CDATA[ <div class=""><p>As of version 2025-07 of the GraphQL Storefront API, the <code>Cart</code> object now provides detailed warnings for non-applicable <a href="https://shopify.dev/docs/api/storefront/latest/objects/CartDiscountCode" target="_blank" class="body-link"><code>CartDiscountCodes</code></a>.</p>
<p>Previously, when a discount code could not be applied, the <code>CartDiscountCode</code> was returned with <code>applicable: false</code>, and no additional details. This lack of information made it difficult for developers to provide helpful feedback to buyers.</p>
<p>With the introduction of the new <a href="https://shopify.dev/docs/api/storefront/2025-07/objects/CartWarning" target="_blank" class="body-link"><code>CartWarning</code></a> types, you can now clearly identify the specific reasons why a discount code isn't applicable.</p>
</div> ]]></description>
    <pubDate>Thu, 22 May 2025 16:00:00 +0000</pubDate>
    <atom:published>2025-05-22T16:00:00.000Z</atom:published>
    <atom:updated>2025-05-22T16:00:00.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <category>Storefront API</category>
    <category>2025-07</category>
    <link>https://shopify.dev/changelog/add-warnings-for-discount-codes</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/add-warnings-for-discount-codes</guid>
  </item>
  <item>
    <title>Passing parameters to static blocks</title>
    <description><![CDATA[ <div class=""><p>You can now pass arbitraty parameters to static blocks, making it possible simplify the theme code by building more composable components. </p>
<p>As an example, you can pass color from your section to your static block:</p>
<pre><code>{% content_for &quot;block&quot;, id:&quot;slide-1&quot;, type:&quot;slideshow&quot;, color: &quot;#F00&quot; %}
</code></pre>
<p>From the block that data can be easily accessed:</p>
<pre><code>{{ color }}
</code></pre>
<p>You can learn more about this feature in our <a href="https://shopify.dev/docs/storefronts/themes/architecture/blocks/theme-blocks/static-blocks#passing-data-to-static-blocks" target="_blank" class="body-link">developer docs</a>.</p>
</div> ]]></description>
    <pubDate>Wed, 21 May 2025 19:00:00 +0000</pubDate>
    <atom:published>2025-05-21T19:00:00.000Z</atom:published>
    <atom:updated>2025-05-21T19:00:00.000Z</atom:updated>
    <category>Themes</category>
    <category>New</category>
    <link>https://shopify.dev/changelog/passing-parameters-to-static-blocks</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/passing-parameters-to-static-blocks</guid>
  </item>
  <item>
    <title>Recommend theme blocks in the block picker</title>
    <description><![CDATA[ <div class=""><p>You can now recommend specific theme blocks in the block picker, making them easier to find. </p>
<p><img src="https://shopify.dev/assets/themes/theme-editor/recommended-blocks.png" alt="Block preview"></p>
<p>To do this, include the <code>@theme</code> block type along with your recommended blocks in the <code>blocks</code> array of the schema. All other blocks remain accessible by selecting <strong>Show all</strong>. <a href="https://shopify.dev/docs/storefronts/themes/architecture/sections/section-schema#recommended-blocks" target="_blank" class="body-link">Learn more</a>.</p>
</div> ]]></description>
    <pubDate>Wed, 21 May 2025 17:00:00 +0000</pubDate>
    <atom:published>2025-05-21T17:00:00.000Z</atom:published>
    <atom:updated>2025-05-21T17:00:00.000Z</atom:updated>
    <category>Themes</category>
    <category>New</category>
    <link>https://shopify.dev/changelog/recommend-theme-blocks-in-the-block-picker</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/recommend-theme-blocks-in-the-block-picker</guid>
  </item>
  <item>
    <title>Deprecation of legacy return APIs and improvements to return management</title>
    <description><![CDATA[ <div class=""><p>We're introducing important changes to simplify and enhance return management in the Shopify Admin API.</p>
<h2>What's changing?</h2>
<ul>
<li>The <a href="https://shopify.dev/docs/api/admin-graphql/2025-07/mutations/returnRefund" target="_blank" class="body-link"><code>returnRefund</code></a> mutation is deprecated and replaced by the new <a href="https://shopify.dev/docs/api/admin-graphql/2025-07/mutations/returnProcess" target="_blank" class="body-link"><code>returnProcess</code></a> mutation. The <a href="https://shopify.dev/docs/api/admin-graphql/2025-07/mutations/returnProcess" target="_blank" class="body-link"><code>returnProcess</code></a> mutation streamlines return lifecycle management by combining disposition decisions and financial processing into a single call.</li>
<li>The field <a href="https://shopify.dev/docs/api/admin-graphql/2025-07/objects/suggestedReturnRefund" target="_blank" class="body-link"><code>Return.suggestedReturnRefund</code></a> is deprecated in favor of the new <a href="https://shopify.dev/docs/api/admin-graphql/2025-07/objects/SuggestedReturnFinancialOutcome" target="_blank" class="body-link"><code>Return.suggestedFinancialOutcome</code></a> field.</li>
<li>Exchange fulfillment orders are now created only when exchange line items are processed, ensuring accuracy.</li>
<li>Refunds and return processing now offer enhanced precision for managing returned line items.</li>
</ul>
<p><strong>Action required:</strong><br>If your app currently creates returns using <a href="https://shopify.dev/docs/api/admin-graphql/2025-07/mutations/returnCreate" target="_blank" class="body-link"><code>returnCreate</code></a> or approves return requests using <a href="https://shopify.dev/docs/api/admin-graphql/2025-07/mutations/returnApproveRequest" target="_blank" class="body-link"><code>returnApproveRequest</code></a>, migrate to the new <a href="https://shopify.dev/docs/api/admin-graphql/2025-07/mutations/returnProcess" target="_blank" class="body-link"><code>returnProcess</code></a> mutation to handle refunds and exchanges. The older mutations (<a href="https://shopify.dev/docs/api/admin-graphql/2025-07/mutations/refundCreate" target="_blank" class="body-link"><code>refundCreate</code></a>, <a href="https://shopify.dev/docs/api/admin-graphql/2025-07/mutations/returnRefund" target="_blank" class="body-link"><code>returnRefund</code></a>) and the query field (<a href="https://shopify.dev/docs/api/admin-graphql/2025-07/objects/suggestedRefund" target="_blank" class="body-link"><code>Return.suggestedRefund</code></a>) are deprecated. Instead, you should now use <a href="https://shopify.dev/docs/api/admin-graphql/2025-07/mutations/returnProcess" target="_blank" class="body-link"><code>returnProcess</code></a> and <a href="https://shopify.dev/docs/api/admin-graphql/2025-07/objects/SuggestedReturnFinancialOutcome" target="_blank" class="body-link"><code>Return.suggestedFinancialOutcome</code></a>.</p>
<p><strong>Availability:</strong><br>These new APIs are available now in the <code>unstable</code> API version and officially launch in API version <code>2025-07</code>.</p>
<p>For more details, see our updated <a href="https://shopify.dev/docs/apps/build/orders-fulfillment/returns-apps/migrate-to-return-processing" target="_blank" class="body-link">migration guide</a>.</p>
</div> ]]></description>
    <pubDate>Wed, 21 May 2025 17:00:00 +0000</pubDate>
    <atom:published>2025-05-21T17:00:00.000Z</atom:published>
    <atom:updated>2025-05-21T17:00:00.000Z</atom:updated>
    <category>Action Required</category>
    <category>API</category>
    <category>Breaking API Change</category>
    <category>Admin GraphQL API</category>
    <category>2025-07</category>
    <link>https://shopify.dev/changelog/deprecation-of-legacy-return-apis-and-improvements-to-return-management</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/deprecation-of-legacy-return-apis-and-improvements-to-return-management</guid>
  </item>
  <item>
    <title>Filter articles by title</title>
    <description><![CDATA[ <div class=""><p>We've added a <a href="https://shopify.dev/docs/api/admin-graphql/2025-07/queries/articles#argument-query-filter-title" target="_blank" class="body-link"><code>title</code></a> filter to the <code>articles</code> query, allowing you to fetch a list of articles by their <code>title</code>.</p>
<pre><code>{
  articles(query: &quot;title:about us&quot;, first: 10) {
    edges {
      node {
        id
        title
      }
    }
  }
}
</code></pre>
</div> ]]></description>
    <pubDate>Wed, 21 May 2025 16:00:00 +0000</pubDate>
    <atom:published>2025-05-21T16:00:00.000Z</atom:published>
    <atom:updated>2025-05-21T16:00:00.000Z</atom:updated>
    <category>API</category>
    <category>Update</category>
    <category>Admin GraphQL API</category>
    <category>2025-07</category>
    <link>https://shopify.dev/changelog/add-support-for-title-filtering-with-articles</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/add-support-for-title-filtering-with-articles</guid>
  </item>
  <item>
    <title>The Summer '25 Edition is here</title>
    <description><![CDATA[ <div class=""><p>New features, good vibes. Announcing 150+ updates to Shopify.</p>
<p><a href="http://shopify.com/editions/summer2025?utm_source=changelog-dev&utm_medium=changelog-dev&utm_campaign=summer25edition&utm_content=dev-en-en" target="_blank" class="body-link">See the updates</a></p>
</div> ]]></description>
    <pubDate>Wed, 21 May 2025 13:30:00 +0000</pubDate>
    <atom:published>2025-05-21T13:30:00.000Z</atom:published>
    <atom:updated>2025-05-21T14:53:31.000Z</atom:updated>
    <category>Platform</category>
    <category>New</category>
    <link>https://shopify.dev/changelog/the-summer-25-edition-is-here</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/the-summer-25-edition-is-here</guid>
  </item>
  <item>
    <title>Hydrogen May 2025 Release</title>
    <description><![CDATA[ <div class=""><p>The latest version of Hydrogen, 2025.5.0 is out today. With this release, Hydrogen is upgrading from Remix 2 to React Router 7. Follow the upgrade guide shared in our Hydrogen May 2025 release blog post <a href="https://hydrogen.shopify.dev/update/how-to-adopt-all-future-flags" target="_blank" class="body-link">https://hydrogen.shopify.dev/update/may-2025</a>. And please drop your comments, feedback, and suggestions in <a href="https://github.com/Shopify/hydrogen/discussions" target="_blank" class="body-link">GitHub Discussions</a>! </p>
</div> ]]></description>
    <pubDate>Wed, 21 May 2025 12:50:00 +0000</pubDate>
    <atom:published>2025-05-21T12:50:00.000Z</atom:published>
    <atom:updated>2025-09-30T03:14:21.000Z</atom:updated>
    <category>API</category>
    <category>Update</category>
    <link>https://shopify.dev/changelog/hydrogen-may-2025-release</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/hydrogen-may-2025-release</guid>
  </item>
  <item>
    <title>Shopify Catalog</title>
    <description><![CDATA[ <div class=""><p>Shopify Catalog provides select apps and AI agents with access to Shopify’s global product catalog delivering detailed product information including pricing, options, and availability in real-time. It is available as both an API and an MCP server, giving developers a choice in how they build their app and access product data.  </p>
<p>Select partners will be given access to Shopify Catalog. To be considered, please sign up through the <a href="https://www.shopify.com/editions/summer2025#global-shopify-catalog" target="_blank" class="body-link">Summer ‘25 Shopify Editions site</a>. </p>
</div> ]]></description>
    <pubDate>Wed, 21 May 2025 12:45:00 +0000</pubDate>
    <atom:published>2025-05-21T12:45:00.000Z</atom:published>
    <atom:updated>2025-05-21T15:33:18.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <link>https://shopify.dev/changelog/shopify-catalog</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/shopify-catalog</guid>
  </item>
  <item>
    <title>Improved app recommendations and listing highlights for large merchants</title>
    <description><![CDATA[ <div class=""><p>We’ve improved the recommendation algorithm for large merchants to better surface apps installed and liked by similar-sized businesses. </p>
<p>In addition to where personalized results are currently shown, the app listing page will have a new section highlighting key insights for large businesses.</p>
</div> ]]></description>
    <pubDate>Wed, 21 May 2025 12:30:00 +0000</pubDate>
    <atom:published>2025-05-21T12:30:00.000Z</atom:published>
    <atom:updated>2025-05-21T12:30:00.000Z</atom:updated>
    <category>App store</category>
    <category>Update</category>
    <link>https://shopify.dev/changelog/personalized-app-recommendations-for-large-merchants</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/personalized-app-recommendations-for-large-merchants</guid>
  </item>
  <item>
    <title>Improvements to Japanese, Chinese, Korean, and Thai language search on the Shopify App Store</title>
    <description><![CDATA[ <div class=""><p>We've optimized Shopify App Store search for Japanese, Chinese, Korean, and Thai, allowing global merchants to discover apps faster and easier. Updates include:</p>
<ul>
<li>Better synonym and character matching in app search results</li>
<li>Improved autocomplete suggestions</li>
<li>Better typing experience with ENTER no longer submits search</li>
</ul>
</div> ]]></description>
    <pubDate>Wed, 21 May 2025 12:30:00 +0000</pubDate>
    <atom:published>2025-05-21T12:30:00.000Z</atom:published>
    <atom:updated>2025-05-21T12:30:00.000Z</atom:updated>
    <category>App store</category>
    <category>Update</category>
    <link>https://shopify.dev/changelog/improvements-to-search-on-the-shopify-app-store</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/improvements-to-search-on-the-shopify-app-store</guid>
  </item>
  <item>
    <title>Deprecation of Product, Order, and Shipping Discount Function APIs</title>
    <description><![CDATA[ <div class=""><p>As of API version 2025-04, the following Function APIs are deprecated:</p>
<ul>
<li><a href="https://shopify.dev/docs/api/functions/latest/product-discount" target="_blank" class="body-link">Product Discount Function API</a></li>
<li><a href="https://shopify.dev/docs/api/functions/latest/order-discount" target="_blank" class="body-link">Order Discount Function API</a></li>
<li><a href="https://shopify.dev/docs/api/functions/latest/shipping-discount" target="_blank" class="body-link">Shipping Discount Function API</a></li>
</ul>
<p><strong>These APIs will be removed from all future stable and unstable API versions.</strong> </p>
<p>To replace these APIs, we've created the new <a href="https://shopify.dev/docs/api/functions/latest/discount" target="_blank" class="body-link">Discount Function API</a>, unifying the functionality of the previous APIs into a single extension. </p>
<p>If you use the existing APIs, before API version 2026-04 you'll need to update to the new Discount Function API. To learn how to do this, read the <a href="https://shopify.dev/docs/api/functions/latest/discount#migrate-from-deprecated-discount-function-apis" target="_blank" class="body-link">migration guide</a>. </p>
</div> ]]></description>
    <pubDate>Wed, 21 May 2025 12:21:00 +0000</pubDate>
    <atom:published>2025-05-21T12:21:00.000Z</atom:published>
    <atom:updated>2025-05-21T14:03:37.000Z</atom:updated>
    <category>Action Required</category>
    <category>API</category>
    <category>Deprecation announcement</category>
    <category>Admin GraphQL API</category>
    <link>https://shopify.dev/changelog/deprecation-product-order-shipping-discount-function-apis</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/deprecation-product-order-shipping-discount-function-apis</guid>
  </item>
  <item>
    <title>CustomerPrivacy API &amp; footer extension target now available for Customer Account extensions</title>
    <description><![CDATA[ <div class=""><p>You can now use the CustomerPrivacy API to manage customer privacy on customer account pages, including the <strong>Order status</strong> page. Use the new <a href="https://shopify.dev/docs/api/customer-account-ui-extensions/latest/targets/footer/customer-account-footer-render-after" target="_blank" class="body-link">footer extension target</a> to build cookie banner extensions that display on each customer account page, or use the API directly to ensure your existing extensions respect customer consent preferences. This update is only available for shops using a custom domain for customer accounts. </p>
<p><a href="https://shopify.dev/docs/api/customer-account-ui-extensions/latest/apis/customer-privacy" target="_blank" class="body-link">Learn more in the CustomerPrivacy API reference.</a></p>
</div> ]]></description>
    <pubDate>Wed, 21 May 2025 12:00:00 +0000</pubDate>
    <atom:published>2025-05-21T12:00:00.000Z</atom:published>
    <atom:updated>2025-05-21T12:00:00.000Z</atom:updated>
    <category>API</category>
    <category>Update</category>
    <category>Customer Accounts</category>
    <link>https://shopify.dev/changelog/customerprivacy-api-now-available-for-customer-account-extensions</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/customerprivacy-api-now-available-for-customer-account-extensions</guid>
  </item>
  <item>
    <title>Conditional settings in the theme editor</title>
    <description><![CDATA[ <div class=""><p>We have introduced a new <code>visible_if</code> Liquid setting property that allows you to control the visibility of settings in the Theme Editor. This attribute enables you to hide theme settings that are not currently relevant, while still preserving their data. It applies to all basic and sidebar settings, as well as most specialized input settings, enhancing the customization experience.</p>
<p>For more detailed information, please refer to the <a href="https://shopify.dev/docs/storefronts/themes/architecture/settings#conditional-settings" target="_blank" class="body-link">developer documentation</a>.</p>
</div> ]]></description>
    <pubDate>Wed, 21 May 2025 12:00:00 +0000</pubDate>
    <atom:published>2025-05-21T12:00:00.000Z</atom:published>
    <atom:updated>2025-05-21T12:00:00.000Z</atom:updated>
    <category>Themes</category>
    <category>New</category>
    <link>https://shopify.dev/changelog/conditional-settings-in-the-theme-editor</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/conditional-settings-in-the-theme-editor</guid>
  </item>
  <item>
    <title>LiquidDoc for snippets and blocks</title>
    <description><![CDATA[ <div class=""><p>LiquidDoc is a new way to add structured documentation directly within your Liquid snippets, and blocks. Define clear input parameters, include helpful descriptions, and provide practical usage examples right alongside your Liquid code.</p>
<p>LiquidDoc integrates seamlessly with theme checks, code completions, and hover information, helping you catch common mistakes - like missing or misspelled parameters - before they become issues. This makes theme development faster, simpler, and more reliable.</p>
<p>Learn more in the <a href="https://shopify.dev/docs/storefronts/themes/tools/liquid-doc" target="_blank" class="body-link">official LiquidDoc documentation</a>.</p>
</div> ]]></description>
    <pubDate>Wed, 21 May 2025 12:00:00 +0000</pubDate>
    <atom:published>2025-05-21T12:00:00.000Z</atom:published>
    <atom:updated>2025-05-21T12:00:00.000Z</atom:updated>
    <category>Themes</category>
    <category>New</category>
    <link>https://shopify.dev/changelog/liquiddoc-for-snippets-and-blocks</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/liquiddoc-for-snippets-and-blocks</guid>
  </item>
  <item>
    <title>Skeleton theme is now available</title>
    <description><![CDATA[ <div class=""><p><a href="https://github.com/Shopify/skeleton-theme" target="_blank" class="body-link">Skeleton theme</a> is now available: a minimal, carefully structured Shopify theme designed to help you quickly get started. Built with modularity, maintainability, and Shopify's best practices in mind.</p>
<p>Key features:</p>
<ul>
<li><strong>Minimal and modular:</strong> A clean, flexible starting point.</li>
<li><strong>Best practices built-in:</strong> Performant and easy to maintain.</li>
<li><strong>Developer-focused:</strong> Easy to extend and customize.</li>
</ul>
<p>Get started by visiting the <a href="https://github.com/Shopify/skeleton-theme" target="_blank" class="body-link">Skeleton theme repository</a> or by running <code>shopify theme init</code> from your command line.</p>
</div> ]]></description>
    <pubDate>Wed, 21 May 2025 12:00:00 +0000</pubDate>
    <atom:published>2025-05-21T12:00:00.000Z</atom:published>
    <atom:updated>2025-05-21T12:00:00.000Z</atom:updated>
    <category>Themes</category>
    <category>New</category>
    <link>https://shopify.dev/changelog/skeleton-theme-is-now-available</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/skeleton-theme-is-now-available</guid>
  </item>
  <item>
    <title>Early access: Dev Dashboard</title>
    <description><![CDATA[ <div class=""><p>The all new <a href="https://shopify.dev/beta/next-gen-dev-platform/dev-dashboard" target="_blank" class="body-link">Dev Dashboard</a> serves as a comprehensive hub for all your app development activities, whether you're a merchant creating custom apps or a partner developing public apps. Key features include:</p>
<ul>
<li><strong>Unified App Management</strong>: Seamlessly create, configure, and deploy apps from a single, streamlined interface to simplify your workflow.</li>
<li><strong>Enhanced Development Stores</strong>: Easily create and manage development stores with any Shopify plan, including Plus, offering flexibility and scalability for testing and development.</li>
<li><strong>Improved App Versioning</strong>: Confidently create new versions, manage extensions, and release updates to keep your apps current and functional.</li>
<li><strong>Monitoring and Logs</strong>: Access webhook and function metrics and logs to ensure your app operates correctly.</li>
</ul>
</div> ]]></description>
    <pubDate>Wed, 21 May 2025 12:00:00 +0000</pubDate>
    <atom:published>2025-05-21T12:00:00.000Z</atom:published>
    <atom:updated>2025-05-21T13:02:36.000Z</atom:updated>
    <category>Tools</category>
    <category>New</category>
    <link>https://shopify.dev/changelog/early-access-dev-dashboard</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/early-access-dev-dashboard</guid>
  </item>
  <item>
    <title>Early access: Unified Development Stores</title>
    <description><![CDATA[ <div class=""><p>You can now use the new Dev Dashboard to create development stores with any Shopify plan, including Plus. This provides a testing environment that mirrors the features and limitations of specific production plans.</p>
<ul>
<li><strong>Dev stores with any plan:</strong> Create development stores with Basic, Grow, Advanced, or Plus plans.</li>
<li><strong>Streamlined UI</strong>: Access all your stores through a single, streamlined interface in the Dev Dashboard.</li>
<li><strong>No-cost</strong>: Create and manage these stores at no cost.</li>
</ul>
<p>Learn more about how to use <a href="https://shopify.dev/beta/next-gen-dev-platform/development-stores" target="_blank" class="body-link">development stores in the Next-Gen Dev Platform</a>.</p>
</div> ]]></description>
    <pubDate>Wed, 21 May 2025 12:00:00 +0000</pubDate>
    <atom:published>2025-05-21T12:00:00.000Z</atom:published>
    <atom:updated>2025-05-21T12:00:00.000Z</atom:updated>
    <category>Tools</category>
    <category>New</category>
    <link>https://shopify.dev/changelog/early-access-unified-development-stores</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/early-access-unified-development-stores</guid>
  </item>
  <item>
    <title>Shopify Functions WebAssembly query API</title>
    <description><![CDATA[ <div class=""><p>Shopify Functions now support a WebAssembly query API, letting you build smaller, faster, and more powerful functions. Deserialize data just-in-time, and only pay for the fields your function actually uses.</p>
<p>Learn more about <a href="https://shopify.dev/docs/apps/build/functions/programming-languages/webassembly-for-functions" target="_blank" class="body-link">WebAssembly for Functions</a>.</p>
</div> ]]></description>
    <pubDate>Wed, 21 May 2025 12:00:00 +0000</pubDate>
    <atom:published>2025-05-21T12:00:00.000Z</atom:published>
    <atom:updated>2025-05-21T12:00:00.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <category>Functions</category>
    <link>https://shopify.dev/changelog/functions-webassembly-query-api</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/functions-webassembly-query-api</guid>
  </item>
  <item>
    <title>The Shopify.dev MCP server now supports Polaris web components</title>
    <description><![CDATA[ <div class=""><p>Polaris web component support is now available in early access on the Shopify Dev MCP server. You'll get up-to-date Polaris API documentation, and integration with LLM-assisted workflows for faster and easier development with the updated components. Get started by setting the <code>POLARIS_UNIFIED = true</code> environment variable, or see <a href="https://shopify.dev/docs/beta/next-gen-dev-platform/polaris/using-mcp" target="_blank" class="body-link">the early access docs for more information</a>.</p>
</div> ]]></description>
    <pubDate>Wed, 21 May 2025 12:00:00 +0000</pubDate>
    <atom:published>2025-05-21T12:00:00.000Z</atom:published>
    <atom:updated>2025-07-29T15:07:04.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <link>https://shopify.dev/changelog/the-shopifydev-mcp-server-now-supports-polaris-web-components</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/the-shopifydev-mcp-server-now-supports-polaris-web-components</guid>
  </item>
  <item>
    <title>Flow: Improved Send HTTP request action enables secure connections and returns data to the workflow</title>
    <description><![CDATA[ <div class=""><p>Shopify Flow has an improved <a href="https://help.shopify.com/en/manual/shopify-flow/reference/actions/send-http-request" target="_blank" class="body-link">Send HTTP request</a> action that supports a broader range of integrations with external services by securely storing secrets and returning data to subsequent workflow steps. The action can be securely configured with secrets, such as access tokens or passwords, that are encrypted and obfuscated in Flow. After sending an HTTP request, the full response is returned to the workflow and can be parsed using a <a href="https://help.shopify.com/en/manual/shopify-flow/reference/actions/run-code" target="_blank" class="body-link">Run code</a> action with a JSON.parse method to define a schema so that returned data can be used as variables in conditions and actions.</p>
<p>Review these new templates to learn more about using this improved action:</p>
<ul>
<li><a href="https://admin.shopify.com/apps/flow/editor/templates/0196f2e1-ab85-7157-90e2-7de1149201a7" target="_blank" class="body-link">Send new orders to Airtable</a></li>
<li><a href="https://admin.shopify.com/apps/flow/editor/templates/0196f2e1-a789-7f9d-a64e-a9be2b544e82" target="_blank" class="body-link">Send all existing and new products to Airtable</a></li>
<li><a href="https://admin.shopify.com/apps/flow/editor/templates/0196f2e1-b499-7384-a418-919d752d7a8b" target="_blank" class="body-link">Update products in batches from product data stored in Airtable</a></li>
<li><a href="https://admin.shopify.com/apps/flow/editor/templates/0196f2e1-a4b9-7ff0-8181-9de43d95ae1e" target="_blank" class="body-link">Notify customers of expiring gifts cards using SendGrid</a></li>
<li><a href="https://admin.shopify.com/apps/flow/editor/templates/0196f2e1-adc1-7139-9644-43ba3a4c71eb" target="_blank" class="body-link">Send email using SendGrid when customers places an order for a custom item</a></li>
</ul>
<p>For more information about how it works, visit the <a href="https://help.shopify.com/en/manual/shopify-flow/reference/actions/send-http-request" target="_blank" class="body-link">documentation</a>. For questions and feedback, visit the <a href="https://community.shopify.com/c/shopify-flow-app/bd-p/flow" target="_blank" class="body-link">Shopify community</a>.</p>
</div> ]]></description>
    <pubDate>Wed, 21 May 2025 12:00:00 +0000</pubDate>
    <atom:published>2025-05-21T12:00:00.000Z</atom:published>
    <atom:updated>2025-05-21T13:52:14.000Z</atom:updated>
    <category>Platform</category>
    <category>Update</category>
    <link>https://shopify.dev/changelog/flow-improved-send-http-request-action-enables-secure-connections-and-returns-data-to-the-workflow</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/flow-improved-send-http-request-action-enables-secure-connections-and-returns-data-to-the-workflow</guid>
  </item>
  <item>
    <title>Early access: Declarative Custom Data Definitions</title>
    <description><![CDATA[ <div class=""><p>Declarative custom data definitions offer a streamlined approach for managing and maintaining metafields and metaobjects. Key benefits include:</p>
<ul>
<li>Metafield and metaobject definitions are organized in TOML, and managed through the improved <a href="https://shopify.dev/beta/next-gen-dev-platform/shopify-app-dev" target="_blank" class="body-link"><code>app dev</code></a> command.</li>
<li>Shopify automatically distributes these definitions to multiple shops simultaneously, significantly speeding up migration processes.</li>
<li>Updates are atomic, ensuring that all stores consistently maintain the same version of your definitions.</li>
<li>All declarative definitions include app-scoped limits, which prevent resource competition among different apps.</li>
</ul>
<p>For more information, see the <a href="https://shopify.dev/beta/next-gen-dev-platform/declarative-custom-data-definitions" target="_blank" class="body-link">declarative custom data documentation</a> on shopify.dev.</p>
</div> ]]></description>
    <pubDate>Wed, 21 May 2025 12:00:00 +0000</pubDate>
    <atom:published>2025-05-21T12:00:00.000Z</atom:published>
    <atom:updated>2025-05-21T12:00:00.000Z</atom:updated>
    <category>Tools</category>
    <category>New</category>
    <category>2025-07</category>
    <link>https://shopify.dev/changelog/declarative-custom-data-definitions</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/declarative-custom-data-definitions</guid>
  </item>
  <item>
    <title>Uncapped counts in GraphQL</title>
    <description><![CDATA[ <div class=""><p>All count APIs in GraphQL now return uncapped results. To retrieve an uncapped count, set the <code>limit</code> argument to <code>null</code>.</p>
<p>As part of this update, we've standardized the implementation across all GraphQL APIs. This change introduces a breaking change: all APIs now include a <code>limit</code> argument, with a default value of <code>10000</code>.</p>
<p>List of APIs impacted</p>
<ul>
<li><a href="https://shopify.dev/docs/api/admin-graphql/2025-07/queries/abandonedCheckoutsCount" target="_blank" class="body-link">abandonedCheckoutsCount</a></li>
<li><a href="https://shopify.dev/docs/api/admin-graphql/2025-07/queries/blogsCount" target="_blank" class="body-link">blogsCount</a></li>
<li><a href="https://shopify.dev/docs/api/admin-graphql/2025-07/queries/catalogsCount" target="_blank" class="body-link">catalogsCount</a></li>
<li><a href="https://shopify.dev/docs/api/admin-graphql/2025-07/queries/collectionsCount" target="_blank" class="body-link">collectionsCount</a></li>
<li><a href="https://shopify.dev/docs/api/admin-graphql/2025-07/queries/customersCount" target="_blank" class="body-link">customersCount</a></li>
<li><a href="https://shopify.dev/docs/api/admin-graphql/2025-07/queries/discountCodesCount" target="_blank" class="body-link">discountCodesCount</a></li>
<li><a href="https://shopify.dev/docs/api/admin-graphql/2025-07/queries/discountNodesCount" target="_blank" class="body-link">discountNodesCount</a></li>
<li><a href="https://shopify.dev/docs/api/admin-graphql/2025-07/queries/draftOrdersCount" target="_blank" class="body-link">draftOrdersCount</a></li>
<li><a href="https://shopify.dev/docs/api/admin-graphql/2025-07/queries/giftCardsCount" target="_blank" class="body-link">giftCardsCount</a></li>
<li><a href="https://shopify.dev/docs/api/admin-graphql/2025-07/queries/locationsCount" target="_blank" class="body-link">locationsCount</a></li>
<li><a href="https://shopify.dev/docs/api/admin-graphql/2025-07/queries/ordersCount" target="_blank" class="body-link">ordersCount</a></li>
<li><a href="https://shopify.dev/docs/api/admin-graphql/2025-07/queries/pagesCount" target="_blank" class="body-link">pagesCount</a></li>
<li><a href="https://shopify.dev/docs/api/admin-graphql/2025-07/queries/productsCount" target="_blank" class="body-link">productsCount</a></li>
<li><a href="https://shopify.dev/docs/api/admin-graphql/2025-07/queries/productVariantsCount" target="_blank" class="body-link">productVariantsCount</a></li>
<li><a href="https://shopify.dev/docs/api/admin-graphql/2025-07/queries/urlRedirectsCount" target="_blank" class="body-link">urlRedirectsCount</a></li>
<li><a href="https://shopify.dev/docs/api/admin-graphql/2025-07/queries/webhookSubscriptionsCount" target="_blank" class="body-link">webhookSubscriptionsCount</a></li>
</ul>
<p>Note: Due to the large number of events generated, we're continuing to cap <a href="https://shopify.dev/docs/api/admin-graphql/2025-07/queries/eventsCount" target="_blank" class="body-link">eventsCount</a> at 10,000. </p>
</div> ]]></description>
    <pubDate>Wed, 21 May 2025 12:00:00 +0000</pubDate>
    <atom:published>2025-05-21T12:00:00.000Z</atom:published>
    <atom:updated>2025-05-21T13:38:30.000Z</atom:updated>
    <category>Action Required</category>
    <category>API</category>
    <category>Breaking API Change</category>
    <category>Admin GraphQL API</category>
    <category>2025-07</category>
    <link>https://shopify.dev/changelog/uncapped-graphql-counts</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/uncapped-graphql-counts</guid>
  </item>
  <item>
    <title>Polaris unified web components are now available (early access)</title>
    <description><![CDATA[ <div class=""><p>We've updated Polaris, making it a unified web component toolkit for all Shopify surfaces: Admin, Checkout, Customer Accounts. Additionally, Polaris is now smaller, faster, framework-agnostic, and always up-to-date via Shopify’s CDN. This update is in early access.</p>
<p>To get started, <a href="https://shopify.dev/beta/next-gen-dev-platform/polaris" target="_blank" class="body-link">check out the developer documentation</a>, or learn more about the library by reading <a href="https://www.shopify.com/partners/blog/polaris-unified-and-for-the-web" target="_blank" class="body-link">our blog post</a>.</p>
</div> ]]></description>
    <pubDate>Wed, 21 May 2025 12:00:00 +0000</pubDate>
    <atom:published>2025-05-21T12:00:00.000Z</atom:published>
    <atom:updated>2025-07-16T14:56:09.000Z</atom:updated>
    <category>Tools</category>
    <category>New</category>
    <link>https://shopify.dev/changelog/polaris-unified-web-components-are-now-available-early-access</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/polaris-unified-web-components-are-now-available-early-access</guid>
  </item>
  <item>
    <title>Simplified BFS design requirements</title>
    <description><![CDATA[ <div class=""><p><strong>What is changing?</strong>
Effective June 1st, 2025, all apps undergoing Built for Shopify (BFS) review, will be graded against <a href="https://shopify.dev/docs/apps/launch/built-for-shopify/requirements#design" target="_blank" class="body-link">the simplified BFS design requirements</a>.</p>
<p><strong>Why are we making this change?</strong>
This change is in response to feedback from our partner community. The previous 104 BFS design requirements (spread across 13 design sub-categories) were overwhelming, and could be challenging for Partners to interpret correctly.</p>
<p>The goal with this change was to streamline and simplify the BFS design requirements while still ensuring that the BFS program continues to be a high-water mark for overall app quality. There are now only 19 BFS design requirements spread across 3 design sub-categories.</p>
<p><strong>What action is required?</strong>
If you are planning to submit your app for BFS review or your existing BFS app is coming up for renewal, please make sure that your app adheres to <a href="https://shopify.dev/docs/apps/launch/built-for-shopify/requirements#design" target="_blank" class="body-link">the simplified BFS design requirements</a>.</p>
</div> ]]></description>
    <pubDate>Wed, 21 May 2025 12:00:00 +0000</pubDate>
    <atom:published>2025-05-21T12:00:00.000Z</atom:published>
    <atom:updated>2025-05-21T12:00:00.000Z</atom:updated>
    <category>Built for Shopify</category>
    <category>Update</category>
    <link>https://shopify.dev/changelog/simplified-bfs-design-requirements</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/simplified-bfs-design-requirements</guid>
  </item>
  <item>
    <title>Early access: The re-engineered `shopify app dev`</title>
    <description><![CDATA[ <div class=""><p>The Shopify CLI <code>app dev</code> command enables development, preview, and testing of your app on development stores. This command includes a number of improvements when used with early access to the <a href="https://shopify.dev/beta/next-gen-dev-platform" target="_blank" class="body-link">Next-Gen Dev Platform</a>:</p>
<ul>
<li>All changes are isolated to your chosen development store.</li>
<li>All changes to <a href="/docs/apps/build/cli-for-apps/app-configuration" target="_blank" class="body-link">app configuration</a> can now be previewed, without the need to run <code>app deploy</code>.</li>
<li>Extension additions and deletions are now included, without the need to restart <code>app dev</code>.</li>
<li>Your app is now automatically installed on your chosen development store.</li>
<li>Access scope changes are automatically accepted on your chosen development store when you change them in the <code>shopify.app.toml</code>.</li>
<li>The app preview created during <code>app dev</code> remains on your development store until you run <code>app dev clean</code> or uninstall the app.</li>
<li>The Dev Console in the Shopify Admin will inform you about any active app previews on the store.</li>
</ul>
<p><strong>Note</strong>: For existing apps, the behavior of <code>app dev</code> is currently unchanged.</p>
<p>For more information, see documentation on <a href="https://shopify.dev/beta/next-gen-dev-platform/shopify-app-dev" target="_blank" class="body-link">improvements to the <code>app dev</code> command</a>.</p>
<p>Please report any issues and provide your feedback about these updates <a href="https://community.shopify.dev/new-topic?category=shopify-cli-libraries&tags=new-app-dev-command" target="_blank" class="body-link">on the Shopify Developer Community</a>.</p>
</div> ]]></description>
    <pubDate>Wed, 21 May 2025 12:00:00 +0000</pubDate>
    <atom:published>2025-05-21T12:00:00.000Z</atom:published>
    <atom:updated>2025-05-21T12:00:00.000Z</atom:updated>
    <category>Tools</category>
    <category>Update</category>
    <link>https://shopify.dev/changelog/early-access-the-re-engineered-shopify-app-dev</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/early-access-the-re-engineered-shopify-app-dev</guid>
  </item>
  <item>
    <title>Shopify Functions support in Dev Assistant and the shopify.dev MCP server</title>
    <description><![CDATA[ <div class=""><p>We've enhanced the Dev Assistant and the shopify.dev MCP server, adding support for Shopify Functions. Now, AI-powered assistance can help you build and optimize Functions code, streamline your development process, and accelerate your implementation. When you describe your desired outcome to the Dev Assistant, it can do the following things: </p>
<ul>
<li><strong>Suggest a Function API</strong> : Identify the most suitable Function API for your use case.</li>
<li><strong>Generate code</strong>: For example, input queries, Function logic (in Rust), and the expected output.</li>
<li><strong>Convert JavaScript to Rust</strong>: Convert existing JavaScript code to Rust, enhancing performance and lowering execution costs.</li>
</ul>
<p>Together, these features simplify Shopify Functions development, making it more accessible to developers who are new to Rust or unfamiliar with the Function APIs.</p>
<p>To get started, simply describe your Functions-related goals to the Dev Assistant. Then, let it guide you through your implementation with relevant code examples and explanations.</p>
<p>This new functionality is available in the <a href="http://shopify.dev/?assistant=1" target="_blank" class="body-link">Dev Assistant on shopify.dev</a>, or through the <a href="https://github.com/Shopify/dev-mcp?tab=readme-ov-file#development" target="_blank" class="body-link">shopify.dev MCP server</a>.</p>
</div> ]]></description>
    <pubDate>Wed, 21 May 2025 12:00:00 +0000</pubDate>
    <atom:published>2025-05-21T12:00:00.000Z</atom:published>
    <atom:updated>2025-05-21T12:00:00.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <category>Functions</category>
    <link>https://shopify.dev/changelog/shopify-functions-support-in-dev-assistant-and-shopifydev-mcp-server</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/shopify-functions-support-in-dev-assistant-and-shopifydev-mcp-server</guid>
  </item>
  <item>
    <title> New reference documentation for Shopify Function APIs</title>
    <description><![CDATA[ <div class=""><p>We've completely revamped our highly-visited and least-loved Shopify Function API reference docs. You’ve shared many helpful comments and questions through our <strong>Was this page helpful?</strong> form, and we’ve reviewed and addressed them in this latest revision.</p>
<p>Here’s the lowdown on the latest updates.</p>
<h2>One comprehensive overview</h2>
<p>We’ve added a single, consolidated overview that outlines the foundational information you need before diving into any specific Function API. No more feeling lost right from the start!</p>
<p><img src="https://cdn.shopify.com/s/files/1/0262/2383/7206/files/functions-overview.png?v=1747772969" alt="Overview"></p>
<h2>A dedicated page for each Function API</h2>
<p>Each Function API now has its own dedicated page, meaning you’ll no longer need to jump between various pages to find the information you need. This streamlined approach helps you to understand the API, its targets, data structures, and common use cases.</p>
<p><strong>And what can you expect on each page?</strong></p>
<ul>
<li><strong>End-to-end examples for every Function API</strong>, demonstrating complete implementation patterns tailored to common merchant scenarios.  </li>
<li><strong>Interactive object exploration</strong> to help you dive deep into GraphQL objects—all in one convenient location.   </li>
<li><strong>Visual diagrams</strong> that clearly illustrate how each Function operates within the Shopify ecosystem, making complex concepts easier to grasp.  </li>
<li><strong>Performance metrics</strong> that show execution costs for each Function API, helping you to optimize your integrations efficiently.</li>
</ul>
<p><img src="https://cdn.shopify.com/s/files/1/0262/2383/7206/files/examples_metrics_explorer.png?v=1747772969" alt="E2E Examples, Performance metrics, GQL explorer">
<img src="https://cdn.shopify.com/s/files/1/0262/2383/7206/files/visual-functions.png?v=1747772969" alt="Visual Illustration of Function APIs"></p>
<h2>A version picker for easy navigation</h2>
<p>We’ve introduced a centralized version picker that allows you to toggle between different API versions easily, right from the sidebar.</p>
<p><img src="https://cdn.shopify.com/s/files/1/0262/2383/7206/files/version-picker.png?v=1747772969" alt="Version Picker"></p>
<h2>Give it a try!</h2>
<p>These updates are all about making your life easier. Less time scratching your head or making guesses means more time building amazing things!</p>
<p><a href="https://shopify.dev/docs/api/functions" target="_blank" class="body-link">Explore the revamped docs</a>—we'd love to know what you think. Where have these updates helped, and where else in the Function API docs would you like to see improvements? You can leave comments by clicking the <strong>Was this page helpful?</strong> button.</p>
</div> ]]></description>
    <pubDate>Wed, 21 May 2025 12:00:00 +0000</pubDate>
    <atom:published>2025-05-21T12:00:00.000Z</atom:published>
    <atom:updated>2025-05-21T13:35:06.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <category>Functions</category>
    <link>https://shopify.dev/changelog/new-reference-documentation-for-shopify-function-apis</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/new-reference-documentation-for-shopify-function-apis</guid>
  </item>
  <item>
    <title>Block previews are now available in theme editor</title>
    <description><![CDATA[ <div class=""><p>Block presets now have visual previews in the picker, similarly to section previews.</p>
<p><img src="https://shopify.dev/assets/themes/theme-editor/add-block-preview-empty.png" alt="Block preview"></p>
<p>No action is required—previews will work automatically. If you want to further customize how your blocks appear in preview mode, learn more about the optional <code>visual_preview_mode</code> attribute in our <a href="https://shopify.dev/docs/storefronts/themes/best-practices/editor/integrate-sections-and-blocks#detect-the-theme-editor-visual-preview" target="_blank" class="body-link">theme editor documentation</a>.</p>
</div> ]]></description>
    <pubDate>Wed, 21 May 2025 12:00:00 +0000</pubDate>
    <atom:published>2025-05-21T12:00:00.000Z</atom:published>
    <atom:updated>2025-05-21T12:00:00.000Z</atom:updated>
    <category>Themes</category>
    <category>New</category>
    <link>https://shopify.dev/changelog/block-previews-now-available-in-theme-editor</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/block-previews-now-available-in-theme-editor</guid>
  </item>
  <item>
    <title>[Cart AJAX API] Discounts support on `/cart/update.js`</title>
    <description><![CDATA[ <div class=""><p>We have added support for discounts in the Cart AJAX API's <code>/cart/update.js</code> endpoint. You can now <a href="https://shopify.dev/docs/api/ajax/reference/cart#update-discounts-in-the-cart" target="_blank" class="body-link">add or remove discounts from your cart</a> using the <code>discount</code> parameter.</p>
<p>Learn more about cart discount support on <a href="https://shopify.dev/docs/api/ajax/reference/cart#update-the-cart-discounts" target="_blank" class="body-link">shopify.dev</a>.</p>
</div> ]]></description>
    <pubDate>Wed, 21 May 2025 12:00:00 +0000</pubDate>
    <atom:published>2025-05-21T12:00:00.000Z</atom:published>
    <atom:updated>2025-06-24T16:43:19.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <link>https://shopify.dev/changelog/cart-ajax-api-discounts-support-on-cartupdatejs</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/cart-ajax-api-discounts-support-on-cartupdatejs</guid>
  </item>
  <item>
    <title>Edit line items with subscriptions and preorders prior to fulfilling an order</title>
    <description><![CDATA[ <div class=""><p>You can now edit line items with selling plans (including subscriptions and pre-orders) before an order ships. This update gives you the flexibility to change quantities, add discounts, and remove line items that contain a selling plan. </p>
<p>This functionality is available through the <a href="https://shopify.dev/docs/apps/build/orders-fulfillment/order-management-apps/edit-orders" target="_blank" class="body-link">Order Edit API</a> and Shopify Admin. </p>
</div> ]]></description>
    <pubDate>Wed, 21 May 2025 12:00:00 +0000</pubDate>
    <atom:published>2025-05-21T12:00:00.000Z</atom:published>
    <atom:updated>2025-05-21T12:00:00.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <category>Admin GraphQL API</category>
    <link>https://shopify.dev/changelog/edit-line-items-selling-plans</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/edit-line-items-selling-plans</guid>
  </item>
  <item>
    <title>Localhost-based development for `shopify app dev`</title>
    <description><![CDATA[ <div class=""><p>Now, you can serve your app using <code>localhost</code> (<code>127.0.0.1</code>) with a self-signed HTTPS certificate, which Shopify CLI generates for you. This allows you to develop some Shopify app features without the use of network tunnels.</p>
<p>To serve your app using localhost, run the following command using Shopify CLI 3.80 or higher: <code>shopify app dev --use-localhost</code>.</p>
<p>Newly added since developer preview:</p>
<ul>
<li><code>--use-localhost</code> will now use a static port by default, which you can override with <code>--localhost-port</code>.</li>
<li>Detection of Windows Subsystem for Linux and documentation on additional required steps for its setup.</li>
</ul>
<p><strong>Note</strong>: Localhost-based development isn't compatible with the Shopify features that directly invoke your app, such as Webhooks, App proxy, and Flow actions, and features that require you to test your app from another device, such as POS.</p>
<p>For more information, you can read about <a href="https://shopify.dev/docs/apps/build/cli-for-apps/networking-options" target="_blank" class="body-link">networking options for local development</a>.</p>
<p>Please report any issues and provide your feedback about this feature <a href="https://community.shopify.dev/new-topic?category=shopify-cli-libraries&tags=app-dev-on-localhost" target="_blank" class="body-link">on the Shopify Developer Community</a>.</p>
</div> ]]></description>
    <pubDate>Wed, 21 May 2025 12:00:00 +0000</pubDate>
    <atom:published>2025-05-21T12:00:00.000Z</atom:published>
    <atom:updated>2025-05-21T12:00:00.000Z</atom:updated>
    <category>Tools</category>
    <category>New</category>
    <link>https://shopify.dev/changelog/localhost-based-development-for-shopify-app-dev</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/localhost-based-development-for-shopify-app-dev</guid>
  </item>
  <item>
    <title>POS-specific Shopify Function logic</title>
    <description><![CDATA[ <div class=""><p>The new <code>retailLocation</code> field in the Function APIs allows you to tailor your logic based on whether a checkout is happening in a retail environment. This allows you to create different behaviors depending on the sales channel or even the specific retail store location. For example, you can implement location-specific discounts only for in-store purchases, creating differentiated experiences between online and retail customers.</p>
<p>The <code>retailLocation</code> field is currently available in the unstable API version, and will be included in the stable 2025-07 API version.</p>
</div> ]]></description>
    <pubDate>Wed, 21 May 2025 12:00:00 +0000</pubDate>
    <atom:published>2025-05-21T12:00:00.000Z</atom:published>
    <atom:updated>2025-05-21T12:00:00.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <category>Functions</category>
    <category>2025-07</category>
    <link>https://shopify.dev/changelog/pos-specific-shopify-function-logic</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/pos-specific-shopify-function-logic</guid>
  </item>
  <item>
    <title>Shopify Functions can execute up to 25 functions in a single batch</title>
    <description><![CDATA[ <div class=""><p>Shopify Functions now supports up to 25 active functions per Function API, increased from the previous limit of 5. This allows developers to split complex or unrelated logic into smaller, dedicated functions rather than combining everything together.</p>
<p>This change applies to:</p>
<ul>
<li><a href="https://shopify.dev/docs/api/functions/reference/payment-customization" target="_blank" class="body-link">Payment customizations</a></li>
<li><a href="https://shopify.dev/docs/api/functions/reference/delivery-customization" target="_blank" class="body-link">Delivery customizations</a></li>
<li><a href="https://shopify.dev/docs/api/functions/reference/cart-checkout-validation" target="_blank" class="body-link">Cart and checkout validations</a></li>
<li><a href="https://shopify.dev/docs/api/functions/reference/fulfillment-constraints" target="_blank" class="body-link">Fulfillment constraints</a></li>
</ul>
</div> ]]></description>
    <pubDate>Wed, 21 May 2025 12:00:00 +0000</pubDate>
    <atom:published>2025-05-21T12:00:00.000Z</atom:published>
    <atom:updated>2025-05-21T12:00:00.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <category>Functions</category>
    <link>https://shopify.dev/changelog/shopify-functions-25-functions-limit</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/shopify-functions-25-functions-limit</guid>
  </item>
  <item>
    <title>JavaScript and stylesheet tags in snippets</title>
    <description><![CDATA[ <div class=""><p>In addition to blocks and sections, you can now use the <code>{% stylesheet %}</code> and <code>{% javascript %}</code> Liquid tags in snippets. Bundling stylesheet and JavaScript assets helps keep your theme modular. This makes the files portable across different themes and shops without losing their functionality or styling.</p>
<p>Learn more about the tags in our <a href="https://shopify.dev/docs/storefronts/themes/best-practices/javascript-and-stylesheet-tags" target="_blank" class="body-link">documentation</a>.</p>
</div> ]]></description>
    <pubDate>Wed, 21 May 2025 12:00:00 +0000</pubDate>
    <atom:published>2025-05-21T12:00:00.000Z</atom:published>
    <atom:updated>2025-05-21T12:00:00.000Z</atom:updated>
    <category>Themes</category>
    <category>New</category>
    <link>https://shopify.dev/changelog/javascript-and-stylesheet-tags-in-snippets</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/javascript-and-stylesheet-tags-in-snippets</guid>
  </item>
  <item>
    <title>Categories for Section and Block Presets</title>
    <description><![CDATA[ <div class=""><p>We've added a new optional <code>category</code> property for section and block presets that helps you organize your presets into logical groups. Now your merchants can find the right design elements faster and more intuitively in the Online Store Editor.</p>
<p>You can learn more by visiting <a href="http://shopify.dev/docs/storefronts/themes/architecture/blocks/theme-blocks/schema#presets" target="_blank" class="body-link">block preset</a> and <a href="http://shopify.dev/docs/storefronts/themes/architecture/sections/section-schema#presets" target="_blank" class="body-link">section preset</a> docs.</p>
</div> ]]></description>
    <pubDate>Wed, 21 May 2025 12:00:00 +0000</pubDate>
    <atom:published>2025-05-21T12:00:00.000Z</atom:published>
    <atom:updated>2025-05-21T12:00:00.000Z</atom:updated>
    <category>Themes</category>
    <category>New</category>
    <link>https://shopify.dev/changelog/categories-for-section-and-block-presets</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/categories-for-section-and-block-presets</guid>
  </item>
  <item>
    <title>Introducing the new Discount Function API</title>
    <description><![CDATA[ <div class=""><p>In API version 2025-04, we introduced a new <a href="https://shopify.dev/docs/api/functions/reference/discount" target="_blank" class="body-link">Discount Function API</a>, combining the functionality of the Product, Order, and Shipping Discount Function APIs. </p>
<p>This API allows you to create discounts that apply simultaneous savings to products, order totals, and/or shipping costs—a use case historically supported by Shopify Scripts.</p>
<p>To learn more about the new Discount Function API, read our <a href="https://shopify.dev/docs/api/functions/reference/discount" target="_blank" class="body-link">developer documentation</a> and try the <a href="https://shopify.dev/docs/apps/build/discounts/build-discount-function?extension=rust" target="_blank" class="body-link">hands-on tutorial</a>. </p>
<p>If you're using existing discount APIs, the <a href="https://shopify.dev//docs/apps/build/discounts/migrate-discount-api" target="_blank" class="body-link">migration guide</a> describes how to transition to the new Discount Function API.</p>
</div> ]]></description>
    <pubDate>Wed, 21 May 2025 12:00:00 +0000</pubDate>
    <atom:published>2025-05-21T12:00:00.000Z</atom:published>
    <atom:updated>2025-05-21T12:00:00.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <category>Functions</category>
    <link>https://shopify.dev/changelog/new-discount-function-api</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/new-discount-function-api</guid>
  </item>
  <item>
    <title>Apps now permitted to issue refunds to store credit</title>
    <description><![CDATA[ <div class=""><p>As of May 20th, 2025 apps will be permitted to complete refunds to store credit when store credit was not the original payment method. With this update you can issue store credit to customers as a refund and they can later spend that store credit at checkout. A customer's store credit is visible on their customer accounts profile page and it can be queried via the GraphQL Admin API.</p>
<p><a href="http://shopify.dev/docs/api/admin-graphql/unstable/input-objects/ReturnProcessRefundInput#fields-refundMethods.fields.storeCreditRefund" target="_blank" class="body-link">Learn how to issue store credit refunds in the GraphQL Admin API</a>.</p>
</div> ]]></description>
    <pubDate>Tue, 20 May 2025 19:00:00 +0000</pubDate>
    <atom:published>2025-05-20T19:00:00.000Z</atom:published>
    <atom:updated>2025-05-20T22:51:14.000Z</atom:updated>
    <category>App store</category>
    <category>Update</category>
    <category>Admin GraphQL API</category>
    <link>https://shopify.dev/changelog/apps-now-permitted-to-issue-refunds-to-store-credit</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/apps-now-permitted-to-issue-refunds-to-store-credit</guid>
  </item>
  <item>
    <title>Refund to Store Credit</title>
    <description><![CDATA[ <div class=""><p>You can now issue a specified amount as new store credit when processing refunds. This can be done in addition to refunding amounts to the original payment methods. If a customer requests a refund to their original payment method after already receiving a refund to new store credit, you can accomplish this by specifying a parameter that allows over-refunding. Note that this parameter is disabled by default.</p>
<p>To use this feature, ensure the following prerequisites are met:</p>
<ul>
<li><a href="https://help.shopify.com/en/manual/customers/customer-accounts/new-customer-accounts" target="_blank" class="body-link">New customer accounts</a> must be enabled in the store.</li>
<li>The order must be associated with a customer.</li>
</ul>
<p>This feature integrates with the standard refund API process as follows:</p>
<ul>
<li>Use the <a href="https://shopify.dev/docs/api/admin-graphql/unstable/objects/Order#field-suggestedRefund" target="_blank" class="body-link"><code>Order.suggestedRefund</code> field</a> to create a suggested set of transactions and refund methods. You can now use the <code>refundMethodAllocation</code> parameter to define this set.</li>
<li>Pass the transactions and other refund components (e.g. <code>refundLineItems</code>), as before, to the <a href="https://shopify.dev/docs/api/admin-graphql/unstable/mutations/refundCreate" target="_blank" class="body-link"><code>refundCreate</code> mutation</a>. Additionally, you can now use the <code>refundMethods</code> parameter to pass in any refunds to new store credit.</li>
</ul>
<p>You can also refund to store credit using new return processing APIs:</p>
<ul>
<li>Use the <a href="https://shopify.dev/docs/api/admin-graphql/unstable/objects/Return#field-Return.fields.suggestedFinancialOutcome" target="_blank" class="body-link"><code>Return.suggestedFinancialOutcome</code> field</a> to query for suggested refund amounts. Specify <code>STORE_CREDIT</code> as the <a href="https://shopify.dev/docs/api/admin-graphql/unstable/objects/Return#field-Return.fields.suggestedFinancialOutcome.arguments.refundMethodAllocation" target="_blank" class="body-link"><code>refundMethodAllocation</code> parameter</a> to retrieve a suggested store credit refund amount.</li>
<li>Use the <a href="https://shopify.dev/docs/api/admin-graphql/unstable/input-objects/ReturnProcessInput#fields-financialTransfer.fields.issueRefund.refundMethods" target="_blank" class="body-link"><code>financialTransfer.issueRefund.refundMethods</code> parameter</a> of the <a href="https://shopify.dev/docs/api/admin-graphql/unstable/mutations/returnProcess" target="_blank" class="body-link"><code>returnProcess</code> mutation</a> to specify the <code>storeCreditRefund</code> amount and complete the refund.</li>
</ul>
</div> ]]></description>
    <pubDate>Tue, 20 May 2025 18:15:00 +0000</pubDate>
    <atom:published>2025-05-20T18:15:00.000Z</atom:published>
    <atom:updated>2025-05-20T18:15:00.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <category>Admin GraphQL API</category>
    <link>https://shopify.dev/changelog/refund-to-store-credit</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/refund-to-store-credit</guid>
  </item>
  <item>
    <title>New GraphQL API for Draft Order Delivery Options for Developers</title>
    <description><![CDATA[ <div class=""><p>This API enables you to efficiently retrieve all available delivery options for draft orders with a single request. It introduces a specialized endpoint that replaces the legacy <code>CalculatedDraftOrder</code> <a href="https://shopify.dev/docs/api/admin-graphql/2025-07/objects/CalculatedDraftOrder#field-availableShippingRates" target="_blank" class="body-link">field</a> for available shipping rates.</p>
<p>The new endpoint allows developers to fetch not only shipping rates but also options for local delivery and pickup, with support for pagination. This feature is now accessible to all apps with the <a href="https://shopify.dev/docs/api/usage/access-scope" target="_blank" class="body-link">read_draft_orders access scope</a>. This enhancement streamlines the process of obtaining comprehensive delivery options, improving the efficiency of order management.</p>
</div> ]]></description>
    <pubDate>Tue, 20 May 2025 16:00:00 +0000</pubDate>
    <atom:published>2025-05-20T16:00:00.000Z</atom:published>
    <atom:updated>2025-05-20T16:00:00.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <category>Admin GraphQL API</category>
    <category>2025-07</category>
    <link>https://shopify.dev/changelog/new-graphql-api-for-draft-order-delivery-options-for-developers</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/new-graphql-api-for-draft-order-delivery-options-for-developers</guid>
  </item>
  <item>
    <title>Hydrogen April 2025 Release</title>
    <description><![CDATA[ <div class=""><p>The latest version of Hydrogen v2025.4.0 is out. This release contains updates to internationalization, cart functionality, and template improvements, as well as the latest SFAPI version.</p>
<ul>
<li>Update SFAPI to 2025-04 (<a href="https://github.com/Shopify/hydrogen/pull/2886" target="_blank" class="body-link">#2886</a>)</li>
<li>Fixed duplicate content issues with internationalized product handles (<a href="https://github.com/Shopify/hydrogen/pull/2821" target="_blank" class="body-link">#2821</a>).</li>
<li>Fixed cart quantity validation (<a href="https://github.com/Shopify/hydrogen/pull/2855" target="_blank" class="body-link">#2855</a>)</li>
<li>Improved customer account logout handling (<a href="https://github.com/Shopify/hydrogen/pull/2843" target="_blank" class="body-link">#2843</a>)</li>
<li>Deprecated <code>&lt;VariantSelector /&gt;</code> (<a href="https://github.com/Shopify/hydrogen/pull/2837" target="_blank" class="body-link">#2837</a>)</li>
<li>Refactored ProductItem into a separate component (<a href="https://github.com/Shopify/hydrogen/pull/2872" target="_blank" class="body-link">#2872</a>)</li>
</ul>
<p>Check out our full <a href="https://hydrogen.shopify.dev/update/april-2025" target="_blank" class="body-link">Hydrogen April 2025 release blog post</a> for more details. And please drop your comments, feedback, and suggestions in <a href="https://github.com/Shopify/hydrogen/discussions" target="_blank" class="body-link">GitHub Discussions</a>!</p>
</div> ]]></description>
    <pubDate>Tue, 20 May 2025 11:30:00 +0000</pubDate>
    <atom:published>2025-05-20T11:30:00.000Z</atom:published>
    <atom:updated>2025-05-20T13:58:23.000Z</atom:updated>
    <category>Platform</category>
    <category>Update</category>
    <link>https://shopify.dev/changelog/hydrogen-april-2025-release</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/hydrogen-april-2025-release</guid>
  </item>
  <item>
    <title>Public access for app owned metafields and metaobjects is now disabled</title>
    <description><![CDATA[ <div class=""><p>In line with last year's <a href="https://shopify.dev/changelog/simplifying-how-metafield-and-metaobject-permissions-work" target="_blank" class="body-link">announcement</a> regarding metafields access simplification, we are now implementing the removal of <code>PUBLIC</code> access for app-owned metafields and metaobjects. </p>
<p>The following updates have been applied across all API versions:</p>
<ol>
<li>Metafields and metaobjects previously set to <code>PUBLIC_READ_WRITE</code> are now set to <code>MERCHANT_READ_WRITE</code>.</li>
<li>Metafields and metaobjects previously set to <code>PUBLIC_READ</code> are now set to <code>MERCHANT_READ</code>.</li>
</ol>
<p><strong>Required Action</strong>: If your app needs metafields or metaobjects to be accessible by other apps, you must migrate them to a custom namespace rather than using your app's reserved namespace. A custom namespace allows for broader access options, while a reserved namespace is specific to your app.</p>
</div> ]]></description>
    <pubDate>Mon, 19 May 2025 17:00:00 +0000</pubDate>
    <atom:published>2025-05-19T17:00:00.000Z</atom:published>
    <atom:updated>2025-05-19T17:00:00.000Z</atom:updated>
    <category>Action Required</category>
    <category>API</category>
    <category>Deprecation announcement</category>
    <category>Admin GraphQL API</category>
    <link>https://shopify.dev/changelog/public-access-for-app-owned-metafields-and-metaobjects-is-now-disabled</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/public-access-for-app-owned-metafields-and-metaobjects-is-now-disabled</guid>
  </item>
  <item>
    <title>Updated Shopify Theme Store Requirements and Submission Process – Effective May 15, 2025</title>
    <description><![CDATA[ <div class=""><p>Starting May 15, 2025, all Shopify themes must meet the updated <a href="https://shopify.dev/docs/storefronts/themes/store/requirements" target="_blank" class="body-link">Theme Store requirements</a> for new submissions and updates.</p>
<p><strong>Key changes include:</strong></p>
<ul>
<li><strong>Theme Zip File Structure:</strong> New <a href="https://shopify.dev/docs/storefronts/themes/store/success/updates#adding-theme-presets" target="_blank" class="body-link">/listings folder</a> is now required in theme zip files.</li>
<li><strong>Preset Naming Requirements:</strong> Theme <a href="https://shopify.dev/docs/storefronts/themes/store/requirements#18-naming-themes-and-theme-presets" target="_blank" class="body-link">name requirements</a> now apply to each preset.</li>
<li><strong>Industry Categories + Tagging:</strong>  Each theme preset can be tagged with a maximum of two <a href="https://shopify.dev/docs/storefronts/themes/store/review-process/listings#industry" target="_blank" class="body-link">industries</a>. There are now 20 industry categories to choose from.</li>
<li><strong>Catalog Size Categories + Tagging:</strong> Each theme preset must be tagged with one <a href="https://shopify.dev/docs/storefronts/themes/store/review-process/listings#catalog-size" target="_blank" class="body-link">catalog size</a>. Four catalog size categories are now available.</li>
<li><strong>Demo Store Requirements:</strong></li>
<li>Each <a href="https://shopify.dev/docs/storefronts/themes/store/requirements#20-demo-stores" target="_blank" class="body-link">demo store</a> must match the primary industry and catalog size the preset is tagged with. </li>
<li>The install store must match the expectations set by the demo store.</li>
<li><strong>Listing Page Structure:</strong> The <a href="https://shopify.dev/docs/storefronts/themes/store/review-process/listings" target="_blank" class="body-link">submission form</a> is updated to support individual listing pages for every preset.</li>
<li><strong>Simplified UX &amp; Design Requirements:</strong> Simpler, more explicit, and <a href="https://shopify.dev/docs/storefronts/themes/store/requirements#3-theme-design-and-ux" target="_blank" class="body-link">easier for you to follow</a>.</li>
</ul>
<p>These updates are part of a broader redesign of the Shopify Theme Store, set to launch in July 2025. This redesign aims to enhance theme discovery for merchants and streamline their setup process, while providing developers with better marketing opportunities.</p>
<p><strong>IMPORTANT – Next Steps for Developers:</strong>
To keep your themes listed after the redesign launches in July, please <strong><a href="https://shopify.dev/docs/storefronts/themes/store/success/updates" target="_blank" class="body-link">update and resubmit your theme files</a> by June 22.</strong> Updated themes and listing pages will not be published until the new Theme Store goes live in July.</p>
<p><em><strong>Note:</strong></em> Expect potential delays for new theme submissions and updates during the migration period from May 15 to July 1, 2025.</p>
</div> ]]></description>
    <pubDate>Thu, 15 May 2025 17:30:00 +0000</pubDate>
    <atom:published>2025-05-15T17:30:00.000Z</atom:published>
    <atom:updated>2025-05-15T17:49:32.000Z</atom:updated>
    <category>Action Required</category>
    <category>Shopify Theme Store</category>
    <category>Update</category>
    <link>https://shopify.dev/changelog/updated-shopify-theme-store-requirements-and-submission-process-effective-may-15-2025</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/updated-shopify-theme-store-requirements-and-submission-process-effective-may-15-2025</guid>
  </item>
  <item>
    <title>Archiving outdated, unhelpful, and untrusted reviews on the Shopify App Store</title>
    <description><![CDATA[ <div class=""><p>To increase the trustworthiness of the Shopify App Store, we’re archiving a significant number of outdated, unhelpful, and untrusted reviews.</p>
<p>Archived reviews are not factored into app ratings or total review counts. Some will remain visible at the end of the reviews section on app listings. </p>
<p>While many reviews are being archived, the vast majority of apps will not see changes to their app rating or ranking. </p>
<p>In the coming months, we’re adding more quality signals to help businesses find apps that are truly right for them. Together, these updates combat manipulative practices like review farming, fake reviews, and other bad faith reviews so you can focus on what matters most—building exceptional apps that help businesses grow.</p>
<p>To streamline feedback, developers now receive instant email notifications when merchants submit new reviews. Later this year, we’ll also introduce tools to help app developers collect merchant feedback directly within the Shopify admin. </p>
<p>Archived review decisions cannot be appealed. For more details, explore our updated <a href="https://shopify.dev/docs/apps/launch/marketing/manage-app-reviews" target="_blank" class="body-link">docs</a>.</p>
</div> ]]></description>
    <pubDate>Thu, 15 May 2025 14:15:00 +0000</pubDate>
    <atom:published>2025-05-15T14:15:00.000Z</atom:published>
    <atom:updated>2025-05-15T14:15:00.000Z</atom:updated>
    <category>App store</category>
    <category>New</category>
    <link>https://shopify.dev/changelog/archiving-outdated-unhelpful-and-untrusted-reviews-on-the-shopify-app-store</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/archiving-outdated-unhelpful-and-untrusted-reviews-on-the-shopify-app-store</guid>
  </item>
  <item>
    <title>Network access support for Discount Functions</title>
    <description><![CDATA[ <div class=""><p>The <a href="https://shopify.dev/docs/api/functions/reference/discount" target="_blank" class="body-link"><code>Discount Function API</code></a> now supports network access for Enterprise merchants, giving them the ability to integrate with external premium discount, loyalty, and promotion systems. </p>
<p>Network access for the Discount Function API enables these external systems to do the following things:</p>
<ul>
<li>Automatically apply discounts based on customer identity and products in the cart.</li>
<li>Accept externally defined discount codes.</li>
</ul>
<p>Learn more about <a href="https://shopify.dev/docs/apps/build/functions/input-output/network-access" target="_blank" class="body-link">network access</a>.</p>
</div> ]]></description>
    <pubDate>Wed, 14 May 2025 12:30:00 +0000</pubDate>
    <atom:published>2025-05-14T12:30:00.000Z</atom:published>
    <atom:updated>2025-05-19T23:59:25.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <category>Functions</category>
    <link>https://shopify.dev/changelog/network-access-for-discount-function</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/network-access-for-discount-function</guid>
  </item>
  <item>
    <title>New Storefront API CartErrorCode: BUYER_CANNOT_PURCHASE_FOR_COMPANY_LOCATION</title>
    <description><![CDATA[ <div class=""><p>We've introduced a <code>BUYER_CANNOT_PURCHASE_FOR_COMPANY_LOCATION</code> <a href="https://shopify.dev/docs/api/storefront/2025-07/enums/CartErrorCode" target="_blank" class="body-link"><code>CartErrorCode</code></a>, which indicates a buyer has lost permission to purchase for their selected company location.</p>
</div> ]]></description>
    <pubDate>Sat, 10 May 2025 16:00:00 +0000</pubDate>
    <atom:published>2025-05-10T16:00:00.000Z</atom:published>
    <atom:updated>2025-05-10T16:00:00.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <category>Storefront API</category>
    <category>2025-07</category>
    <link>https://shopify.dev/changelog/new-storefront-api-carterrorcode-buyercannotpurchaseforcompanylocation</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/new-storefront-api-carterrorcode-buyercannotpurchaseforcompanylocation</guid>
  </item>
  <item>
    <title>Store credit account balance now available in Liquid</title>
    <description><![CDATA[ <div class=""><p>You can now remind customers of their store credit balance by displaying it on the storefront using the new <a href="https://shopify.dev/docs/api/liquid/objects/store_credit_account" target="_blank" class="body-link"><code>store credit account object</code></a>. This object can be accessed through the <code>store_credit_account</code> property of the <a href="https://shopify.dev/docs/api/liquid/objects/customer" target="_blank" class="body-link">customer</a> object.</p>
<p>To display the customer's store credit balance in the current context, use the following Liquid expression: <code>{{customer.store_credit_account.balance | money_with_currency}}</code>.</p>
<p><a href="https://shopify.dev/docs/api/liquid/objects/store_credit_account" target="_blank" class="body-link">Learn more</a> about using store credit in Liquid.</p>
</div> ]]></description>
    <pubDate>Wed, 07 May 2025 16:00:00 +0000</pubDate>
    <atom:published>2025-05-07T16:00:00.000Z</atom:published>
    <atom:updated>2025-05-07T16:00:00.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <category>Liquid</category>
    <link>https://shopify.dev/changelog/store-credit-account-balance-available-in-liquid</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/store-credit-account-balance-available-in-liquid</guid>
  </item>
  <item>
    <title>Deprecating `gates` types and fields across the GraphQL Admin, Storefront, and Functions APIs</title>
    <description><![CDATA[ <div class=""><p>Shopify is retiring gates types and fields due to limited usage and our commitment to enhancing developer tools with more robust APIs. To ensure your applications continue to function optimally, we recommend transitioning your implementations to metafields and metaobjects. These solutions offer powerful capabilities for managing structured custom data, seamlessly integrated across Shopify's Admin API, Storefront API, and Functions.</p>
<p>Metafields and metaobjects provide a flexible and efficient way to store and retrieve custom data, enhancing your ability to tailor Shopify experiences to your specific needs. For detailed guidance on migrating your implementations, please refer to our <a href="https://shopify.dev/docs/apps/build/custom-data" target="_blank" class="body-link">custom data documentation</a>.</p>
</div> ]]></description>
    <pubDate>Tue, 06 May 2025 16:00:00 +0000</pubDate>
    <atom:published>2025-05-06T16:00:00.000Z</atom:published>
    <atom:updated>2025-05-06T16:00:00.000Z</atom:updated>
    <category>Action Required</category>
    <category>API</category>
    <category>Deprecation announcement</category>
    <category>Admin GraphQL API</category>
    <category>Functions</category>
    <category>Storefront API</category>
    <link>https://shopify.dev/changelog/gates-api-sunset</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/gates-api-sunset</guid>
  </item>
  <item>
    <title>Post-purchase extension development without Chrome extension</title>
    <description><![CDATA[ <div class=""><p>The <code>shopify app dev</code> command now supports post-purchase checkout extensions without requiring the deprecated Chrome extension. This enhancement simplifies development, aligning it more closely with other checkout UI extension patterns.</p>
<p>Now, when you run <code>shopify app dev</code> with a post-purchase extension, the CLI will:</p>
<ul>
<li>Automatically configure cart permalinks with the necessary parameters for testing.</li>
<li>Allow direct testing through the checkout flow without a browser extension.</li>
<li>Redirect to the post-purchase page after the &quot;Pay now&quot; button is clicked.</li>
</ul>
<p>For more detailed guidance, refer to the <a href="https://shopify.dev/docs/apps/build/checkout/product-offers/build-a-post-purchase-offer" target="_blank" class="body-link">Build a post-purchase product offer checkout extension</a> documentation.</p>
</div> ]]></description>
    <pubDate>Sat, 03 May 2025 04:00:00 +0000</pubDate>
    <atom:published>2025-05-03T04:00:00.000Z</atom:published>
    <atom:updated>2025-05-06T19:15:05.000Z</atom:updated>
    <category>Tools</category>
    <category>Update</category>
    <link>https://shopify.dev/changelog/post-purchase-extension-development-without-chrome-extension</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/post-purchase-extension-development-without-chrome-extension</guid>
  </item>
  <item>
    <title>New filter options added to `orders` connection in Customer Account API</title>
    <description><![CDATA[ <div class=""><p>We have added new query parameters to the <code>orders</code> connection (<a href="https://shopify.dev/docs/api/customer/latest/connections/OrderConnection" target="_blank" class="body-link"><code>OrderConnection</code></a>) within the <a href="https://shopify.dev/docs/api/customer/latest/queries/customer" target="_blank" class="body-link"><code>customer</code></a> <a href="https://shopify.dev/docs/api/customer/latest/queries/customer#returns-Customer.fields.orders.arguments.query" target="_blank" class="body-link"><code>query</code></a> of the GraphQL Customer Account API. </p>
<p>Developers can now filter orders using the <a href="https://shopify.dev/docs/api/customer/latest/queries/customer#argument-query-filter-name" target="_blank" class="body-link"><code>name</code></a> and <a href="https://shopify.dev/docs/api/customer/latest/queries/customer#argument-query-filter-confirmation_number" target="_blank" class="body-link"><code>confirmation_number</code></a> parameters, which enables more precise order filtering.</p>
</div> ]]></description>
    <pubDate>Fri, 02 May 2025 16:00:00 +0000</pubDate>
    <atom:published>2025-05-02T16:00:00.000Z</atom:published>
    <atom:updated>2025-07-30T13:59:37.000Z</atom:updated>
    <category>API</category>
    <category>Update</category>
    <category>Customer Account API</category>
    <category>2025-07</category>
    <link>https://shopify.dev/changelog/new-filter-options-added-to-orders-connection-in-customer-account-api</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/new-filter-options-added-to-orders-connection-in-customer-account-api</guid>
  </item>
  <item>
    <title>The `UnitPriceMeasurementMeasuredUnit` enum now includes imperial units and counts</title>
    <description><![CDATA[ <div class=""><p>In the release candidate for version 2025-07 of the <a href="https://shopify.dev/docs/api/storefront/2025-07/enums/UnitPriceMeasurementMeasuredUnit" target="_blank" class="body-link">Storefront</a>, <a href="https://shopify.dev/docs/api/admin-graphql/2025-07/enums/UnitPriceMeasurementMeasuredUnit" target="_blank" class="body-link">GraphQL Admin</a>, and <a href="https://shopify.dev/docs/api/customer/2025-07/enums/UnitPriceMeasurementUnit" target="_blank" class="body-link">Customer Account API</a>, the  <code>UnitPriceMeasurementMeasuredUnit</code> enum now supports values for imperial units and counts.</p>
<p>For example: </p>
<ul>
<li>$10/oz or $5/ft</li>
<li>$2/item</li>
</ul>
<p>This update enables merchants to display more relevant and transparent pricing.</p>
<p>When 2025-07 is in the latest stable version, you can do the following to ensure that your app is compatible with the new measurement units:</p>
<ul>
<li>Update your app to API version 2025-07.</li>
<li>Make relevant <a href="https://shopify.dev/docs/api/usage/versioning#making-requests-to-an-api-version" target="_blank" class="body-link">requests to API version 2025-07</a> for unit pricing.</li>
</ul>
<p>Otherwise, the API will return the price value but return <code>null</code> imperial units and counts.</p>
</div> ]]></description>
    <pubDate>Fri, 02 May 2025 14:00:00 +0000</pubDate>
    <atom:published>2025-05-02T14:00:00.000Z</atom:published>
    <atom:updated>2025-05-02T14:00:00.000Z</atom:updated>
    <category>API</category>
    <category>Breaking API Change</category>
    <category>Admin GraphQL API</category>
    <category>Customer Account API</category>
    <category>Storefront API</category>
    <category>2025-07</category>
    <link>https://shopify.dev/changelog/unit-pricing-api-update</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/unit-pricing-api-update</guid>
  </item>
  <item>
    <title>Shop Component: Shop Pay Payment Request Receipt queries  </title>
    <description><![CDATA[ <div class=""><p>Shopify now enables developers to retrieve Shop Pay payment request details and statuses directly through GraphQL queries. This feature allows easy access to payment information by specifying a custom <code>source_identifier</code> or using the Shop Pay payment request receipt token. By using these identifiers, developers can streamline payment processing workflows and improve the accuracy of data retrieval.</p>
<p>Please note that this feature is available exclusively to merchants using Shop Compoent.</p>
</div> ]]></description>
    <pubDate>Thu, 01 May 2025 16:00:00 +0000</pubDate>
    <atom:published>2025-05-01T16:00:00.000Z</atom:published>
    <atom:updated>2025-05-02T15:36:00.000Z</atom:updated>
    <category>API</category>
    <category>Update</category>
    <category>Admin GraphQL API</category>
    <category>2025-07</category>
    <link>https://shopify.dev/changelog/shop-component-shop-pay-payment-request-receipt-queries</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/shop-component-shop-pay-payment-request-receipt-queries</guid>
  </item>
  <item>
    <title>Deprecation of `draftOrderCreateMerchantCheckout` mutation</title>
    <description><![CDATA[ <div class=""><p>As of API version 2025-07, the <code>draftOrderCreateMerchantCheckout</code> mutation has been deprecated. Please use the <code>draftOrderComplete</code> mutation instead.</p>
<p>For more information, please visit our <a href="https://shopify.dev/docs/api/admin-graphql/2025-07/mutations/draftOrderComplete" target="_blank" class="body-link">help docs</a>.</p>
</div> ]]></description>
    <pubDate>Thu, 01 May 2025 16:00:00 +0000</pubDate>
    <atom:published>2025-05-01T16:00:00.000Z</atom:published>
    <atom:updated>2025-05-01T16:00:00.000Z</atom:updated>
    <category>API</category>
    <category>Deprecation announcement</category>
    <category>Admin GraphQL API</category>
    <category>2025-07</category>
    <link>https://shopify.dev/changelog/deprecation-of-draftordercreatemerchantcheckout-mutation</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/deprecation-of-draftordercreatemerchantcheckout-mutation</guid>
  </item>
  <item>
    <title>Web Pixels API: `event.data.checkout.subtotalPrice.amount` value change on the new `/thank-you` page and checkout events</title>
    <description><![CDATA[ <div class=""><p>The <code>event.data.checkout.subtotalPrice.amount</code> value in the <a href="https://shopify.dev/docs/api/web-pixels-api/standard-events/checkout_completed#properties-propertydetail-data" target="_blank" class="body-link">Web Pixels API</a> has been updated. </p>
<p>Previously, this value included the sum of all line item prices and product-level discounts, but not order-level discounts. Now, <code>event.data.checkout.subtotalPrice.amount</code> reflects the sum of all line item prices after applying both product and order-level discounts. This update aligns the definition with the <code>event.data.checkout.subtotalPrice.amount</code> field on the old <code>/thank_you</code> page. </p>
<p>The <code>event.data.checkout.subtotalPrice.amount</code> changes will affect the following events:</p>
<ul>
<li><code>checkout_completed</code> (on the new <code>/thank-you</code> page only)</li>
<li><code>checkout_started</code></li>
<li><code>checkout_address_info_submitted</code></li>
<li><code>checkout_shipping_info_submitted</code></li>
<li><code>checkout_contact_info_submitted</code></li>
<li><code>payment_info_submitted</code></li>
</ul>
<p>If you use any of the above events, you should ensure that your pixel expects both product and order-level discounts to be included in this field.</p>
</div> ]]></description>
    <pubDate>Wed, 30 Apr 2025 17:30:00 +0000</pubDate>
    <atom:published>2025-04-30T17:30:00.000Z</atom:published>
    <atom:updated>2025-04-30T17:30:00.000Z</atom:updated>
    <category>Action Required</category>
    <category>API</category>
    <category>Update</category>
    <link>https://shopify.dev/changelog/web-pixels-api-eventdatacheckoutsubtotalpriceamount-value-change-on-the-new-thank-you-page-and-checkout-events</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/web-pixels-api-eventdatacheckoutsubtotalpriceamount-value-change-on-the-new-thank-you-page-and-checkout-events</guid>
  </item>
  <item>
    <title>More automated checks for app review pre-submission page</title>
    <description><![CDATA[ <div class=""><p>We’ve added new automated checks to the Shopify App Store review process to help you prepare your app for submission, provide faster feedback, and prevent common errors. New auto-checks include:</p>
<ul>
<li>App immediately authenticates after install</li>
<li>Redirects to app UI directly after install</li>
<li>Uninstalls and re-installs correctly</li>
<li>Using the latest version of App Bridge</li>
<li>Additional checks for app listing compliance (with guidance for app name, description)
<img src="https://screenshot.click/pre-submission_image.png" alt=""></li>
</ul>
</div> ]]></description>
    <pubDate>Wed, 30 Apr 2025 17:00:00 +0000</pubDate>
    <atom:published>2025-04-30T17:00:00.000Z</atom:published>
    <atom:updated>2025-04-30T17:00:00.000Z</atom:updated>
    <category>App store</category>
    <category>Update</category>
    <link>https://shopify.dev/changelog/more-automated-checks-for-app-review-pre-submission-page</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/more-automated-checks-for-app-review-pre-submission-page</guid>
  </item>
  <item>
    <title>Display modals after purchase</title>
    <description><![CDATA[ <div class=""><p>The new <a href="https://shopify.dev/docs/api/payments-apps/unstable/mutations/paymentSessionModal" target="_blank" class="body-link"><code>paymentSessionModal</code></a> mutation raises a modal that will be displayed to the buyer after purchase. This modal uses provided data to display additional info to buyers. For example, you could show a QR Code that a buyer can scan, or render message telling buyers to complete an action on an external device.</p>
</div> ]]></description>
    <pubDate>Sat, 26 Apr 2025 16:00:00 +0000</pubDate>
    <atom:published>2025-04-26T16:00:00.000Z</atom:published>
    <atom:updated>2025-04-28T21:48:36.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <category>Payments Apps API</category>
    <category>2025-07</category>
    <link>https://shopify.dev/changelog/new-mutation-to-add-post-pay-actions-onsite</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/new-mutation-to-add-post-pay-actions-onsite</guid>
  </item>
  <item>
    <title>Update to Shopify’s app developer revenue share</title>
    <description><![CDATA[ <div class=""><p>During the pandemic, we lowered our revshare to help small developers and introduced an exemption on the first $1M earned each year. Our ecosystem is stronger than ever—merchants have more than 16,000 apps to choose from, and we paid out more than $1B to developers last year. </p>
<p>The time has now come to sunset the annual exemption reset. <strong>Developers will continue to enjoy a revshare exemption on the first $1 million USD of <em>lifetime</em> revenue, and a 15% share on amounts above that.</strong></p>
<p>Key details:</p>
<ul>
<li>Earnings before January 1, 2025 do not count toward the $1 million threshold.</li>
<li>Earnings are aggregated at the partner level, including apps developed under associated developer accounts.</li>
<li>Updates to Shopify’s <a href="https://www.shopify.com/ca/partners/terms" target="_blank" class="body-link">Partner Program Agreement</a> will go into effect June 16, 2025. Continued use of Shopify services on or after June 16, 2025 confirms that you’ve read, understood, and accepted these new terms.</li>
</ul>
<p>The additional revenue collected will fund tools, infrastructure, and innovation that benefit developers at every stage. Over the past two years alone, we’ve:</p>
<ul>
<li>Introduced platform-managed features, including Shopify-managed installation, webhooks, and pricing—all of which reduce complexity for app developers. </li>
<li>Added admin extensions, Checkout UI extensions, and Shopify Functions, helping developers integrate into admin and offload logic and UI rendering to Shopify. </li>
<li>Offered app metafields and metaobjects with Direct API access, enabling developers to use Shopify for app storage. </li>
<li>Made it easier to grow your app business with a streamlined app review process, a full-funnel ads product, and much more surface area for discovery on the redesigned Shopify App Store.</li>
</ul>
</div> ]]></description>
    <pubDate>Thu, 24 Apr 2025 18:30:00 +0000</pubDate>
    <atom:published>2025-04-24T18:30:00.000Z</atom:published>
    <atom:updated>2025-04-25T20:56:48.000Z</atom:updated>
    <category>App store</category>
    <category>Update</category>
    <link>https://shopify.dev/changelog/update-to-shopifys-app-developer-revenue-share</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/update-to-shopifys-app-developer-revenue-share</guid>
  </item>
  <item>
    <title>Cash transaction rounding for Point of Sale purchases in selected countries</title>
    <description><![CDATA[ <div class=""><p>For specific currencies, cash transactions on Point of Sale now automatically round to the nearest denomination. This applies to cash payments and refunds using the following currencies and regions: CAD (Canada), AUD (Australia), NZD (New Zealand), EUR (Switzerland, Belgium, Finland), DKK (Denmark), SEK (Sweden), NOK (Norway). Additional currencies may be supported in the future.</p>
<p>Additionally, in GraphQL Admin API versions 2024-10 and later, we’ve introduced new fields to simplify queries of cash rounding adjustments for both orders and transactions.</p>
<h3>Order-level cash rounding adjustments</h3>
<p>On the <code>Order</code> object, we've introduced the <a href="https://shopify.dev/docs/api/admin-graphql/latest/objects/Order#field-totalCashRoundingAdjustment" target="_blank" class="body-link"><code>totalCashRoundingAdjustment</code></a> field, which indicates the total cash rounding adjustments applied to all payment and refund transactions within a Point of Sale order.</p>
<ul>
<li><strong>Payments</strong>: Use <a href="https://shopify.dev/docs/api/admin-graphql/latest/objects/CashRoundingAdjustment#field-paymentset" target="_blank" class="body-link"><code>totalCashRoundingAdjustment.paymentSet</code></a>.  </li>
<li><strong>Refunds</strong>: Use <a href="https://shopify.dev/docs/api/admin-graphql/latest/objects/CashRoundingAdjustment#field-refundset" target="_blank" class="body-link"><code>totalCashRoundingAdjustment.refundSet</code></a>.</li>
</ul>
<p>To calculate rounded totals:</p>
<ul>
<li><strong>Rounded total payment</strong>: <code>totalReceivedSet.presentmentMoney</code> + <code>totalCashRoundingAdjustment.paymentSet.presentmentMoney</code>  </li>
<li><strong>Rounded total refund</strong>: <code>totalRefundedSet.presentmentMoney</code> + <code>totalCashRoundingAdjustment.refundSet.presentmentMoney</code></li>
</ul>
<h3>Transaction-level cash rounding adjustments</h3>
<p>On the <code>OrderTransaction</code> object, we've introduced the <a href="https://shopify.dev/docs/api/admin-graphql/latest/objects/OrderTransaction#field-amountRoundingSet" target="_blank" class="body-link"><code>amountRoundingSet</code></a> field, which indicates the cash rounding adjustment applied to an individual cash payment or refund transaction on Point of Sale.</p>
<p>To identify a cash transaction, check that the <a href="https://shopify.dev/docs/api/admin-graphql/latest/objects/OrderTransaction#field-gateway" target="_blank" class="body-link"><code>gateway</code></a> field equals <code>cash</code>. </p>
<p>To calculate the rounded transaction amount:  </p>
<p><strong>Rounded transaction amount</strong> = <code>amountSet.presentmentMoney</code> + <code>amountRoundingSet.presentmentMoney</code></p>
<h3>Example</h3>
<p>Consider an example Point of Sale order:</p>
<ul>
<li>Cash payment: <code>9.99</code>, rounded up by <code>+0.01</code> to <code>10.00</code></li>
<li>Partial cash refund: <code>5.02</code>, rounded down by <code>-0.02</code> to <code>5.00</code></li>
</ul>
<h4>Order example</h4>
<p>| Field | Value |
| :</p>
</div> ]]></description>
    <pubDate>Thu, 24 Apr 2025 16:00:00 +0000</pubDate>
    <atom:published>2025-04-24T16:00:00.000Z</atom:published>
    <atom:updated>2025-04-24T16:00:00.000Z</atom:updated>
    <category>Action Required</category>
    <category>API</category>
    <category>New</category>
    <category>Admin GraphQL API</category>
    <link>https://shopify.dev/changelog/new-cash-rounding-on-order-and-order-transaction</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/new-cash-rounding-on-order-and-order-transaction</guid>
  </item>
  <item>
    <title>POS UI Extensions - Cart API: Customer fields removed from `subscribable` hook</title>
    <description><![CDATA[ <div class=""><p>The POS UI Extensions Cart API has been updated, removing the <code>email</code>, <code>firstName</code>, <code>lastName</code>, and <code>note</code> Customer fields from the <a href="https://shopify.dev/docs/api/pos-ui-extensions/unstable/apis/cart-api#cartapi-propertydetail-subscribable" target="_blank" class="body-link"><code>subscribable hook</code></a>. Any extension used in POS version 10.0.0 or higher, and any extension targeting API version 2025-01 or higher, won't have access to these fields.</p>
<p>To get this data, update your code to use the <code>customerId</code> to retrieve the customer record from the GraphQL Admin API. To do this, your extension must have the <code>read_customers permission</code> access scope.</p>
<p>To learn more, read the <a href="https://shopify.dev/docs/api/pos-ui-extensions" target="_blank" class="body-link">POS UI Extensions</a> documentation.</p>
</div> ]]></description>
    <pubDate>Tue, 22 Apr 2025 16:00:00 +0000</pubDate>
    <atom:published>2025-04-22T16:00:00.000Z</atom:published>
    <atom:updated>2025-04-24T19:57:15.000Z</atom:updated>
    <category>Action Required</category>
    <category>API</category>
    <category>Breaking API Change</category>
    <category>POS Extensions</category>
    <link>https://shopify.dev/changelog/pos-ui-extensions-cart-api-customer-fields-removed-from-subscribable-hook</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/pos-ui-extensions-cart-api-customer-fields-removed-from-subscribable-hook</guid>
  </item>
  <item>
    <title>New arguments added to `statusPageUrl` field on the `Order` object</title>
    <description><![CDATA[ <div class=""><p>We're enhancing the security of order status URLs by replacing static keys with purpose-specific capability tokens. This change helps protect customer data while giving you more control over URL access patterns.</p>
<h3>What's changing</h3>
<p>Order status URLs now use dynamically generated capability tokens instead of static key parameters. These tokens provide better security through limited use counts and automatic expiration. Unlike the previous approach, where tokens have been stored in a database, these tokens are generated on demand when creating order status URLs. This eliminates the need for token storage and management, providing more security.</p>
<h3>How to use the new tokens</h3>
<p>When generating order status URLs, you can now specify two optional arguments:</p>
<ul>
<li><code>notification_usage</code>: The delivery channel.<ul>
<li><code>WEB</code> (default): For most use cases, including email.</li>
<li><code>SMS</code></li>
</ul>
</li>
<li><code>audience</code>: The intended recipient.<ul>
<li><code>CUSTOMERVIEW</code> (default): Intended for a customer. To be sent through a notification and opened at a later time.</li>
<li><code>MERCHANTVIEW</code>: Intended for a merchant. To be used immediately to preview the order status page.</li>
</ul>
</li>
</ul>
<p>Both of these arguments determine the token's configuration, including expiration. Make sure to choose the right combination to ensure you obtain a token that matches the security profile of your intended use case.</p>
<p>The configuration overview is as follows:</p>
<p>| Usage | Audience | Configuration |
|</p>
</div> ]]></description>
    <pubDate>Tue, 22 Apr 2025 16:00:00 +0000</pubDate>
    <atom:published>2025-04-22T16:00:00.000Z</atom:published>
    <atom:updated>2025-04-24T15:35:12.000Z</atom:updated>
    <category>Action Required</category>
    <category>API</category>
    <category>Update</category>
    <category>Admin GraphQL API</category>
    <link>https://shopify.dev/changelog/new-arguments-added-to-statuspageurl-field-on-order-object</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/new-arguments-added-to-statuspageurl-field-on-order-object</guid>
  </item>
  <item>
    <title>Change in `productSet` mutation error code for suspended product</title>
    <description><![CDATA[ <div class=""><p>As of the <code>2025-07</code> version of the GraphQL Admin API, an attempt to update a suspended product using <code>productSet</code> mutation will now return <a href="https://shopify.dev/docs/api/admin-graphql/2025-07/enums/ProductSetUserErrorCode#enum-PRODUCT_SUSPENDED" target="_blank" class="body-link"><code>PRODUCT_SUSPENDED</code></a> error code instead of <a href="https://shopify.dev/docs/api/admin-graphql/2025-07/enums/ProductSetUserErrorCode#enum-INVALID_PRODUCT" target="_blank" class="body-link"><code>INVALID_PRODUCT</code></a>.</p>
<p>For more detailed information and examples, visit our <a href="https://shopify.dev/docs/api/admin-graphql/2025-07/mutations/productSet" target="_blank" class="body-link"><code>productSet</code> documentation</a> on Shopify.dev.</p>
</div> ]]></description>
    <pubDate>Thu, 17 Apr 2025 16:00:00 +0000</pubDate>
    <atom:published>2025-04-17T16:00:00.000Z</atom:published>
    <atom:updated>2025-04-17T16:00:00.000Z</atom:updated>
    <category>Action Required</category>
    <category>API</category>
    <category>Breaking API Change</category>
    <category>Admin GraphQL API</category>
    <category>2025-07</category>
    <link>https://shopify.dev/changelog/change-in-productset-mutation-error-code-for-suspended-product</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/change-in-productset-mutation-error-code-for-suspended-product</guid>
  </item>
  <item>
    <title>Adding `publicDisplayName` field on `ShopPlan`</title>
    <description><![CDATA[ <div class=""><p>The <code>publicDisplayName</code> field is being added to the <a href="https://shopify.dev/docs/api/admin-graphql/latest/objects/shopplan" target="_blank" class="body-link"><code>ShopPlan</code></a> object. This field provides the publicly displayable name of the shop's current plan when requesting <a href="https://shopify.dev/docs/api/admin-graphql/latest/queries/shop" target="_blank" class="body-link">shop properties</a>.</p>
<p>The <code>publicDisplayName</code> field returns a standardized set of plan names, similar to those currently provided by the <a href="https://shopify.dev/docs/api/admin-graphql/latest/objects/shopplan#field-displayName" target="_blank" class="body-link"><code>displayName</code></a> field. This standardization aims to simplify and unify the plan names that are publicly exposed.</p>
<p>Additionally, the plan previously known as <code>Shopify</code> has been renamed to <code>Grow</code>, and this change is reflected in the <code>publicDisplayName</code> field.</p>
<p>Please note that the <code>displayName</code> field will be deprecated in the future. We recommend updating your applications to use the <code>publicDisplayName</code> field to ensure compatibility with future updates.</p>
</div> ]]></description>
    <pubDate>Thu, 17 Apr 2025 13:00:00 +0000</pubDate>
    <atom:published>2025-04-17T13:00:00.000Z</atom:published>
    <atom:updated>2025-04-17T13:00:00.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <category>Admin GraphQL API</category>
    <category>2025-07</category>
    <link>https://shopify.dev/changelog/adding-publicdisplayname-field-on-shopplan</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/adding-publicdisplayname-field-on-shopplan</guid>
  </item>
  <item>
    <title>Payment apps can no longer be embedded in the Shopify admin</title>
    <description><![CDATA[ <div class=""><p>As of April 30, 2025, payment apps are no longer eligible to be embedded apps within the Shopify admin. The <a href="https://shopify.dev/docs/apps/launch/app-requirements-checklist#16-payments-apps" target="_blank" class="body-link">Payment Apps requirements</a> have been updated to reflect this change.</p>
</div> ]]></description>
    <pubDate>Wed, 16 Apr 2025 19:00:00 +0000</pubDate>
    <atom:published>2025-04-16T19:00:00.000Z</atom:published>
    <atom:updated>2025-04-16T19:00:00.000Z</atom:updated>
    <category>Action Required</category>
    <category>App store</category>
    <category>New</category>
    <link>https://shopify.dev/changelog/payment-apps-can-no-longer-be-embedded-in-the-shopify-admin</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/payment-apps-can-no-longer-be-embedded-in-the-shopify-admin</guid>
  </item>
  <item>
    <title>Create smart collections automatically with PRODUCT_CATEGORY_ID_WITH_DESCENDANTS</title>
    <description><![CDATA[ <div class=""><p>We've introduced a new <code>PRODUCT_CATEGORY_ID_WITH_DESCENDANTS</code> column to the <code>CollectionRuleColumn</code>. This field is <a href="https://shopify.dev/docs/api/admin-graphql/unstable/enums/CollectionRuleColumn" target="_blank" class="body-link">used for automated collections</a> and allows you to create smart collections based on a new category tree.</p>
<p>This rule type dynamically includes products in a smart collection based on their product category, as defined in the <a href="https://github.com/Shopify/product-taxonomy/tree/main" target="_blank" class="body-link">updated standard product taxonomy</a>. When a specific product category is set as a condition, this rule will match products directly assigned to the specified category and include any products categorized under its descendants.</p>
<p>To create a smart collection using the new <code>PRODUCT_CATEGORY_ID_WITH_DESCENDANTS</code>, follow this process:</p>
<pre><code>mutation CollectionCreate($input: CollectionInput!) {
  collectionCreate(input: $input) {
    userErrors {
      field
      message
    }
    collection {
      id
      title
      descriptionHtml
      handle
      sortOrder
      ruleSet {
        appliedDisjunctively
        rules {
          column
          relation
          condition
        }
      }
    }
  }
}
{
  &quot;input&quot;: {
    &quot;title&quot;: &quot;Our entire shoe collection&quot;,
    &quot;descriptionHtml&quot;: &quot;View &lt;b&gt;every&lt;/b&gt; shoe available in our store.&quot;,
    &quot;ruleSet&quot;: {
      &quot;appliedDisjunctively&quot;: false,
      &quot;rules&quot;: {
        &quot;column&quot;: &quot;PRODUCT_CATEGORY_ID_WITH_DESCENDANTS&quot;,
        &quot;relation&quot;: &quot;EQUALS&quot;,
        &quot;condition&quot;: &quot;gid://shopify/TaxonomyCategory/aa-5&quot; 
      }
    }
  }
}
</code></pre>
<p>Learn more about collection creation in <a href="https://shopify.dev/docs/api/admin-graphql/latest/mutations/collectionCreate" target="_blank" class="body-link">collectionCreate</a>.</p>
</div> ]]></description>
    <pubDate>Mon, 14 Apr 2025 16:00:00 +0000</pubDate>
    <atom:published>2025-04-14T16:00:00.000Z</atom:published>
    <atom:updated>2025-04-17T15:47:07.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <category>Admin GraphQL API</category>
    <category>2025-07</category>
    <link>https://shopify.dev/changelog/introducing-productcategoryidwithdescendants-in-collectionrulecolumn-for-smart-collections</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/introducing-productcategoryidwithdescendants-in-collectionrulecolumn-for-smart-collections</guid>
  </item>
  <item>
    <title>Session creation payloads now include ISO 3166-2 province codes </title>
    <description><![CDATA[ <div class=""><p>As of the <a href="https://shopify.dev/docs/api/payments-apps" target="_blank" class="body-link">Payments Apps API</a> version 2025-07, session creation payloads now include a new field for  standardized province codes. For example, <code>ON</code> represents Ontario, and <code>QC</code> represents Québec. The <code>province</code> field, which contains the name of the province as a string, remains in the payload. This addition ensures more reliable handling of provinces by eliminating translation inconsistencies and guaranteeing accurate regional identification.</p>
<p>The updated payload structure is as follows:</p>
<pre><code class="language-diff">{
  &quot;province&quot;: &quot;Québec&quot;,
+ &quot;province_code&quot;: &quot;QC&quot;,
  &quot;country_code&quot;: &quot;CA&quot;
}
</code></pre>
<p>The province code adheres to the ISO 3166-2 standard and is available in API version 2025-07 and later. Existing payment apps that rely solely on province names will continue to function without any changes. For detailed implementation guidance, please refer to our <a href="https://shopify.dev/docs/apps/build/payments/request-reference" target="_blank" class="body-link">payment processing documentation</a>.</p>
</div> ]]></description>
    <pubDate>Mon, 14 Apr 2025 16:00:00 +0000</pubDate>
    <atom:published>2025-04-14T16:00:00.000Z</atom:published>
    <atom:updated>2025-04-14T16:00:00.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <category>Payments Apps API</category>
    <category>2025-07</category>
    <link>https://shopify.dev/changelog/payment-session-payloads-now-include-iso-3166-2-province-codes</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/payment-session-payloads-now-include-iso-3166-2-province-codes</guid>
  </item>
  <item>
    <title>App ratings now factor in trust signals, with reviews from lower-trust shops carrying less weight.</title>
    <description><![CDATA[ <div class=""><p>App star ratings now factor in trust signals alongside recency to provide timely, fair assessments. Reviews from lower-trust shops will carry less weight, and may be unpublished. </p>
<p>Partners may see their app’s star rating adjusted—increasing or decreasing—to better reflect reviews from trusted shops.</p>
<p>We’re creating a fairer, more reliable ecosystem for developers and merchants alike. If you have questions, visit our <a href="https://shopify.dev/docs/apps/launch/marketing/manage-app-reviews" target="_blank" class="body-link">docs</a>.</p>
</div> ]]></description>
    <pubDate>Wed, 09 Apr 2025 16:30:00 +0000</pubDate>
    <atom:published>2025-04-09T16:30:00.000Z</atom:published>
    <atom:updated>2025-04-09T16:30:00.000Z</atom:updated>
    <category>App store</category>
    <category>Update</category>
    <link>https://shopify.dev/changelog/app-ratings-now-factor-in-trust-signals</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/app-ratings-now-factor-in-trust-signals</guid>
  </item>
  <item>
    <title>New Inventory Transfers experience available for testing in Dev Preview</title>
    <description><![CDATA[ <div class=""><p>The Inventory Transfers developer preview increases flexibility for apps that manage multi-location inventory transfers. You can build and test integrations that support common inventory movements, such as transfers with multiple shipments, and connect with external systems before these features are available to all merchants.</p>
<p>This developer preview includes both API capabilities and changes to the Shopify admin UI, helping you understand how merchants will interact with these features.</p>
<p>To test these features, enable the <strong>Inventory Transfers</strong> developer preview on your development store. Once your development store is set up and the developer preview is enabled, access the enhanced inventory transfer features by navigating to <strong>Inventory &gt; Transfer.</strong></p>
<p>The developer preview provides access to the following features:</p>
<ul>
<li><a href="https://shopify.dev/docs/api/admin-graphql/unstable/mutations/inventorytransfercreate" target="_blank" class="body-link">Transfers API</a>: Create and manage inventory transfers between locations, supporting multiple shipments.</li>
<li><a href="https://shopify.dev/docs/api/admin-graphql/unstable/mutations/inventorytransferadddraftshipment" target="_blank" class="body-link">Shipment Management &amp; API</a>: Add and track multiple shipments per transfer with detailed tracking information.</li>
<li><a href="https://shopify.dev/docs/api/webhooks/unstable?reference=graphql#list-of-topics-inventory_transfers/ready_to_ship" target="_blank" class="body-link">Webhooks</a>: Stay synchronized with inventory transfer and shipment changes through dedicated webhook topics.</li>
<li>Receiving workflow: Process received goods for each shipment with acceptance and rejection capabilities.</li>
<li>Extensibility options: Use metafields in the APIs for custom transfer data.</li>
<li>Third-party integration: Enable bi-directional syncing with external platforms.</li>
</ul>
<p>This developer preview is valuable for:</p>
<ul>
<li>Partners building solutions for enterprise merchants</li>
<li>Developers integrating with external inventory management systems</li>
<li>POS solution providers requiring advanced inventory capabilities</li>
</ul>
<p><a href="https://shopify.dev/docs/api/development-stores" target="_blank" class="body-link">Learn how to create a development store.</a></p>
</div> ]]></description>
    <pubDate>Tue, 08 Apr 2025 20:00:00 +0000</pubDate>
    <atom:published>2025-04-08T20:00:00.000Z</atom:published>
    <atom:updated>2025-04-08T20:00:00.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <category>Admin GraphQL API</category>
    <link>https://shopify.dev/changelog/new-inventory-transfers-experience-available-for-testing-in-dev-preview</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/new-inventory-transfers-experience-available-for-testing-in-dev-preview</guid>
  </item>
  <item>
    <title>Storefront API now supports cart attributes with blank keys or values</title>
    <description><![CDATA[ <div class=""><p>The GraphQL Storefront API now supports setting <a href="https://shopify.dev/docs/api/storefront/latest/objects/Cart#field-attributes" target="_blank" class="body-link">cart attributes</a> with either blank keys or values. This change applies to all API versions. This matches the behavior of the <a href="https://shopify.dev/docs/api/ajax/reference/cart#update-cart-attributes" target="_blank" class="body-link">AJAX API</a>, which allows for setting blank keys and attributes.</p>
</div> ]]></description>
    <pubDate>Tue, 08 Apr 2025 16:00:00 +0000</pubDate>
    <atom:published>2025-04-08T16:00:00.000Z</atom:published>
    <atom:updated>2025-04-15T23:48:33.000Z</atom:updated>
    <category>API</category>
    <category>Update</category>
    <category>Storefront API</category>
    <link>https://shopify.dev/changelog/storefront-api-now-supports-cart-attributes-with-blank-keys-or-values</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/storefront-api-now-supports-cart-attributes-with-blank-keys-or-values</guid>
  </item>
  <item>
    <title>Allocate a single line item's quantity across multiple fulfillment locations</title>
    <description><![CDATA[ <div class=""><p>Previously, a line item could only be allocated to a single fulfillment location selected by order routing. If the location didn't have sufficient inventory to fulfill all quantities of the line item, then overselling would occur.</p>
<p>Now, a line item can be allocated to multiple fulfillment locations. Quantities are distributed across fulfillment locations within the same location group, which prevents overselling and enables more accurate inventory management.</p>
<p>This change might affect API integrations that read <a href="https://shopify.dev/docs/api/admin-graphql/latest/objects/FulfillmentOrder" target="_blank" class="body-link">fulfillment orders</a> If the app assumes that an <a href="https://shopify.dev/docs/api/admin-graphql/latest/objects/FulfillmentOrder" target="_blank" class="body-link">order</a> can only contain a single fulfillment order for each inventory item, then it might may not account for the full quantity that's required for fulfillment.</p>
<p>This isn't a breaking API change. There was never any guarantees that an order allocates each inventory item to single location. However, because previously this was a relatively rare occurance but will be more frequent moving forward due to automatic splitting, it's possible that some integrations might need to be updated.</p>
<p>Learn more about how API integrations may be impacted by <a href="https://shopify.dev/docs/apps/build/orders-fulfillment/split-fulfillment-orders" target="_blank" class="body-link">line items split across fulfillment orders</a>.</p>
</div> ]]></description>
    <pubDate>Wed, 02 Apr 2025 16:00:00 +0000</pubDate>
    <atom:published>2025-04-02T16:00:00.000Z</atom:published>
    <atom:updated>2025-04-02T16:00:00.000Z</atom:updated>
    <category>API</category>
    <category>Update</category>
    <category>Admin GraphQL API</category>
    <category>Admin REST API</category>
    <link>https://shopify.dev/changelog/a-single-line-items-quantity-can-now-be-allocated-across-multiple-fulfillment-locations</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/a-single-line-items-quantity-can-now-be-allocated-across-multiple-fulfillment-locations</guid>
  </item>
  <item>
    <title>New `planHandle` field for managed pricing app subscription plans</title>
    <description><![CDATA[ <div class=""><p>App subscription plans created with <a href="https://shopify.dev/docs/apps/launch/billing/managed-pricing" target="_blank" class="body-link">managed pricing</a> now include plan handle data. This makes it easier and more consistent to query for app subscription plans, because these human-readable handles persist even if the plan ID changes due to updates or edits.</p>
<p><code>planHandle</code> is available on the <a href="https://shopify.dev/docs/api/admin-graphql/latest/objects/AppRecurringPricing#field-planhandle" target="_blank" class="body-link"><code>AppRecurringPricing</code></a> object, while <code>plan_handle</code> is included in the <a href="https://shopify.dev/docs/api/webhooks/latest?reference=toml#list-of-topics-app_subscriptions/update" target="_blank" class="body-link"><code>app_subscriptions/update</code></a> webhook topic.</p>
<p>With this update, you'll now be asked to define your own plan handle when creating new app subscription plans through your Partner Dashboard. All existing plans have been updated with a <code>planHandle</code> value based on their plan name.</p>
</div> ]]></description>
    <pubDate>Tue, 01 Apr 2025 17:00:00 +0000</pubDate>
    <atom:published>2025-04-01T17:00:00.000Z</atom:published>
    <atom:updated>2025-04-01T17:00:00.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <category>Admin GraphQL API</category>
    <category>Events &amp; webhooks</category>
    <category>2025-04</category>
    <link>https://shopify.dev/changelog/new-planhandle-field-managed-pricing</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/new-planhandle-field-managed-pricing</guid>
  </item>
  <item>
    <title>Stable GraphQL API versions to backfill enum values</title>
    <description><![CDATA[ <div class=""><p>Our stable API versions will retroactively add values into GraphQL Enum types, making them non-exhaustive going forward. This assures that new application data values can be represented in older API versions, which provides better stability.</p>
<p>While this is a non-breaking change, it can cause disruptions to development toolchains. We recommend that you periodically refresh introspection caches, and integrate enums into your application logic with a catch-all that anticipates unknown cases.</p>
<p>For more information, see <a href="https://shopify.dev/docs/api/usage/versioning#stable-api-versions" target="_blank" class="body-link">https://shopify.dev/docs/api/usage/versioning#stable-api-versions</a>.</p>
</div> ]]></description>
    <pubDate>Tue, 01 Apr 2025 16:00:00 +0000</pubDate>
    <atom:published>2025-04-01T16:00:00.000Z</atom:published>
    <atom:updated>2025-04-01T20:41:44.000Z</atom:updated>
    <category>API</category>
    <category>Update</category>
    <category>Admin GraphQL API</category>
    <category>Payments Apps API</category>
    <category>Storefront API</category>
    <link>https://shopify.dev/changelog/stable-graphql-api-versions-to-backfill-enum-values</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/stable-graphql-api-versions-to-backfill-enum-values</guid>
  </item>
  <item>
    <title>Support for card not present transaction details in PaymentsApps API</title>
    <description><![CDATA[ <div class=""><p>You can now enhance the security of &quot;card not present&quot; transactions by providing additional verification details through the Payments Apps API. This update allows you to include Address Verification System (AVS) and Card Verification Value (CVV) results when resolving payment sessions.</p>
<p>To implement these new fields, incorporate them into your <code>paymentSessionResolve</code> mutation:</p>
<pre><code class="language-graphql">mutation PaymentSessionResolve($id: ID\!, $paymentDetails: PaymentSessionDetailsInput) {
  paymentsAppPaymentSessionResolve(id: $id, paymentDetails: $paymentDetails) {
    paymentSession {
      id
    }
  }
}
</code></pre>
<p>The new <code>CardNotPresentInput</code> type includes the following fields:</p>
<ul>
<li><code>cvvResultCode</code>: The response code from CVV verification.</li>
<li><code>avsResultCode</code>: The response code from address verification.</li>
</ul>
<p>By utilizing these fields, you can provide more granular level of fraud analysis data for transactions where the card is not physically present, helping merchants make the right decisions.</p>
<p>For more detailed information, please refer to the <a href="https://shopify.dev/api/payments-apps" target="_blank" class="body-link">Payments Apps API documentation</a>.</p>
</div> ]]></description>
    <pubDate>Tue, 01 Apr 2025 16:00:00 +0000</pubDate>
    <atom:published>2025-04-01T16:00:00.000Z</atom:published>
    <atom:updated>2025-04-01T16:00:00.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <category>Payments Apps API</category>
    <category>2025-07</category>
    <link>https://shopify.dev/changelog/support-for-card-not-present-transaction-details-in-paymentsapps-api</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/support-for-card-not-present-transaction-details-in-paymentsapps-api</guid>
  </item>
  <item>
    <title>Checkout UI extensions: Attributes API now supports removing cart and checkout attributes</title>
    <description><![CDATA[ <div class=""><p>You can now use checkout UI extensions to remove cart and checkout attributes using the <a href="https://shopify.dev/docs/api/checkout-ui-extensions/unstable/apis/attributes#useApplyAttributeChange" target="_blank" class="body-link"><strong>AttributeRemoveChange</strong></a> property. To remove an attribute during checkout, simply pass the attribute key you wish to remove through this new property.</p>
</div> ]]></description>
    <pubDate>Tue, 01 Apr 2025 16:00:00 +0000</pubDate>
    <atom:published>2025-04-01T16:00:00.000Z</atom:published>
    <atom:updated>2025-04-02T16:36:16.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <category>2025-04</category>
    <link>https://shopify.dev/changelog/checkout-ui-extensions-attributes-api-now-supports-removing-cart-and-checkout-attributes</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/checkout-ui-extensions-attributes-api-now-supports-removing-cart-and-checkout-attributes</guid>
  </item>
  <item>
    <title>`draftOrderCount` available in 2025-07</title>
    <description><![CDATA[ <div class=""><p>The <a href="https://shopify.dev/docs/api/admin-graphql/2025-07/queries/draftOrderCount" target="_blank" class="body-link"><code>draftOrderCount</code></a> query is now available in the 2025-07 stable version of the GraphQL Admin API. Previously, it was only available in the <code>unstable</code> version.</p>
</div> ]]></description>
    <pubDate>Tue, 01 Apr 2025 16:00:00 +0000</pubDate>
    <atom:published>2025-04-01T16:00:00.000Z</atom:published>
    <atom:updated>2025-04-01T16:00:00.000Z</atom:updated>
    <category>API</category>
    <category>Update</category>
    <category>Admin GraphQL API</category>
    <category>2025-07</category>
    <link>https://shopify.dev/changelog/draftordercount-available-in-2025-07</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/draftordercount-available-in-2025-07</guid>
  </item>
  <item>
    <title>New webhook to track updates to checkout and accounts configuration </title>
    <description><![CDATA[ <div class=""><p>API version 2025-04 introduces the <code>checkout_and_accounts_configurations/update</code> webhook, which fires when merchants update their checkout and accounts configuration (draft and published). </p>
<p>To learn whether or not your users have upgraded their Thank you and Order status pages, monitor the <code>typ_osp_pages_enabled</code> field in this webhook's payload. No need to check manually by making API calls!</p>
<p>With this knowledge, you can send timely communication to merchants regarding onboarding and configuration steps for your app.</p>
<p>Make sure to subscribe to this <a href="https://shopify.dev/docs/api/webhooks/2025-04?reference=tool#list-of-topics-checkout_and_accounts_configurations/update" target="_blank" class="body-link">webhook</a> as soon as possible, in advance of the upcoming deadlines for merchants to upgrade their Thank you and Order status pages:</p>
<ul>
<li><strong>Plus merchants</strong>: <a href="https://help.shopify.com/manual/checkout-settings/customize-checkout-configurations/plus-upgrade-guide" target="_blank" class="body-link">August 28, 2025</a></li>
<li><strong>Non-Plus merchants</strong>: <a href="https://help.shopify.com/manual/checkout-settings/customize-checkout-configurations/checkout-upgrade-guide" target="_blank" class="body-link">August 26, 2026</a></li>
</ul>
</div> ]]></description>
    <pubDate>Tue, 01 Apr 2025 16:00:00 +0000</pubDate>
    <atom:published>2025-04-01T16:00:00.000Z</atom:published>
    <atom:updated>2025-04-02T04:36:27.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <category>Events &amp; webhooks</category>
    <category>2025-04</category>
    <link>https://shopify.dev/changelog/new-webhook-to-track-updates-to-checkout-and-accounts-configuration</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/new-webhook-to-track-updates-to-checkout-and-accounts-configuration</guid>
  </item>
  <item>
    <title>`productSet` and `customerSet` mutations now support upserts and custom IDs</title>
    <description><![CDATA[ <div class=""><p>As of version 2025-04, the <a href="/docs/api/admin-graphql/2025-04/mutations/productSet" target="_blank" class="body-link"><code>productSet</code></a> and <a href="/docs/api/admin-graphql/2025-04/mutations/customerSet" target="_blank" class="body-link"><code>customerSet</code></a> mutations of the GraphQL Admin API support upserting (creating or updating) records by <code>identifier</code>. </p>
<p>When <code>identifier</code> is provided, these mutations use it to check for an existing record. If an existing record is found, then the mutation updates it with the data provided in <code>input</code>. Otherwise, the mutation creates a new record.</p>
<p>The <code>identifier</code> gives developers a straightforward, idempotent mechanism to create and subsequently update records with the same shape of inputs, without the need for extra queries to check if records exist. For identifiers, <code>productSet</code> allows <code>handle</code>, <code>id</code>, and <code>customId</code>. <code>customerSet</code> allows <code>phone</code>, <code>email</code>, and <code>customId</code>.</p>
<p>This extends previously existing behaviour on <code>productSet</code>, which updates a record if <code>id</code> is provided in the <code>input</code> and otherwise creates a new record. The <code>customerSet</code> mutation was previously released only to the <code>unstable</code> version of the API.</p>
<p>Read more about <a href="/docs/apps/build/custom-data/metafields/working-with-custom-ids" target="_blank" class="body-link">using Custom IDs</a>.</p>
</div> ]]></description>
    <pubDate>Tue, 01 Apr 2025 16:00:00 +0000</pubDate>
    <atom:published>2025-04-01T16:00:00.000Z</atom:published>
    <atom:updated>2025-04-01T16:00:00.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <category>Admin GraphQL API</category>
    <category>2025-04</category>
    <link>https://shopify.dev/changelog/productset-and-customerset-mutations-now-support-upserts</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/productset-and-customerset-mutations-now-support-upserts</guid>
  </item>
  <item>
    <title>`@inContext` directive added to the Customer Account API</title>
    <description><![CDATA[ <div class=""><p>As of API version 2025-04, we've added the <code>@inContext</code> directive in the <a href="https://shopify.dev/docs/api/customer" target="_blank" class="body-link">Customer Account API</a>. The <code>@inContext</code> directive accepts an argument: <code>language</code>.</p>
<ul>
<li>If the requested language is active for the given country, as configured within the shop's <a href="https://help.shopify.com/en/manual/international/languages/manage-languages" target="_blank" class="body-link">Language settings</a>, then the query will return translated values.</li>
<li>If an unsupported language or country is requested using <code>@inContext</code>, then the response will fall back to the default language.</li>
</ul>
<p>The following operation shows an example usage of this directive:</p>
<pre><code>			mutation customerAddressUpdate @inContext(language: FR){
				customerAddressUpdate(address: {phoneNumber: &quot;invalid123&quot;}, addressId: &quot;gid://shopify/CustomerAddress/123456&quot; ) {
					userErrors {
						code
						field
						message
					}
				}
			}
</code></pre>
<p>Response:</p>
<pre><code>		{
				&quot;data&quot;: {
					&quot;customerAddressUpdate&quot;: {
						&quot;userErrors&quot;: [
							{
								&quot;code&quot;: &quot;PHONE_NUMBER_NOT_VALID&quot;,
								&quot;field&quot;: null,
								&quot;message&quot;: &quot;Le numéro de téléphone n'est pas valide.&quot;
							}
						]
					}
				},
				&quot;extensions&quot;: {
					&quot;context&quot;: {
						&quot;country&quot;: &quot;CA&quot;,
						&quot;language&quot;: &quot;FR&quot;
					},
					&quot;cost&quot;: {
						&quot;requestedQueryCost&quot;: 10,
						&quot;actualQueryCost&quot;: 10
					}
				}
			}
</code></pre>
</div> ]]></description>
    <pubDate>Tue, 01 Apr 2025 16:00:00 +0000</pubDate>
    <atom:published>2025-04-01T16:00:00.000Z</atom:published>
    <atom:updated>2025-04-01T16:00:00.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <category>Customer Account API</category>
    <category>2025-04</category>
    <link>https://shopify.dev/changelog/exposed-incontext-directive-with-the-customer-account-api</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/exposed-incontext-directive-with-the-customer-account-api</guid>
  </item>
  <item>
    <title>Adding defaultEmailAddress field to Customer</title>
    <description><![CDATA[ <div class=""><p>As of GraphQL Admin API version <strong>2025-04</strong>, the <code>defaultEmailAddress</code> field is introduced on the <code>Customer</code> object to support querying a customer's email address and marketing state.</p>
<p>Learn more about the <code>Customer</code> fields on <a href="https://shopify.dev/docs/api/admin-graphql/2025-04/objects/Customer" target="_blank" class="body-link">Shopify.dev</a>.</p>
</div> ]]></description>
    <pubDate>Tue, 01 Apr 2025 16:00:00 +0000</pubDate>
    <atom:published>2025-04-01T16:00:00.000Z</atom:published>
    <atom:updated>2025-04-01T16:00:00.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <category>Admin GraphQL API</category>
    <category>2025-04</category>
    <link>https://shopify.dev/changelog/adding-defaultemailaddress-field-to-customer</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/adding-defaultemailaddress-field-to-customer</guid>
  </item>
  <item>
    <title>Customer RFM group now available in GraphQL Admin API</title>
    <description><![CDATA[ <div class=""><p>You can now access a customer's RFM (Recency, Frequency, Monetary) group through the GraphQL Admin API. This new <code>rfmGroup</code> field in customer statistics helps you understand customer engagement and purchasing patterns.</p>
<p>The <code>rfmGroup</code> field is available through the <code>statistics</code> field on the <code>Customer</code> object. You can use this information to segment customers based on their purchasing behavior and create targeted marketing campaigns.</p>
<p>For more detailed information, please refer to the <a href="https://shopify.dev/docs/api/admin-graphql/2025-04/objects/CustomerStatistics" target="_blank" class="body-link">official documentation</a>.</p>
<p>Example query:</p>
<pre><code class="language-graphql">query {
  customer(id: &quot;gid://shopify/Customer/1&quot;) {
    statistics {
      rfmGroup
    }
  }
}
</code></pre>
</div> ]]></description>
    <pubDate>Tue, 01 Apr 2025 16:00:00 +0000</pubDate>
    <atom:published>2025-04-01T16:00:00.000Z</atom:published>
    <atom:updated>2025-04-01T16:00:00.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <category>Admin GraphQL API</category>
    <category>2025-04</category>
    <link>https://shopify.dev/changelog/customer-rfm-group-now-available-in-graphql-admin-api</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/customer-rfm-group-now-available-in-graphql-admin-api</guid>
  </item>
  <item>
    <title>New finance KYC information field available for Shopify-approved finance apps</title>
    <description><![CDATA[ <div class=""><p>As of API version 2025-04, <a href="https://shopify.dev/docs/api/usage/access-scopes#authenticated-access-scopes" target="_blank" class="body-link">Shopify-approved finance apps</a> can retrieve the following information using the <a href="https://shopify.dev/docs/api/admin-graphql/unstable/objects/FinanceKycInformation" target="_blank" class="body-link"><code>FinanceKycInformation</code></a> object, on behalf of an approved shop <a href="https://shopify.dev/docs/api/admin-graphql/unstable/objects/StaffMember" target="_blank" class="body-link">staff member</a>:</p>
<ul>
<li>Business address</li>
<li>Business type</li>
<li>Industry</li>
<li>Business legal name</li>
<li>Shop owner information</li>
<li>Tax identification information</li>
<li>Finances access policies</li>
</ul>
<p>The following webhooks related to updating staff with access to the app will also be available:</p>
<ul>
<li><code>FINANCE_APP_STAFF_MEMBER_DELETE</code> - Triggers when a staff with access to all or some finance app has been removed</li>
<li><code>FINANCE_APP_STAFF_MEMBER_GRANT</code> - Triggers when a staff is granted access to all or some finance app</li>
<li><code>FINANCE_APP_STAFF_MEMBER_REVOKE</code> - Triggers when a staff's access to all or some finance app has been revoked</li>
<li><code>FINANCE_APP_STAFF_MEMBER_UPDATE</code> - Triggers when a staff's information has been updated</li>
<li><code>FINANCE_KYC_INFORMATION_UPDATE</code> -   Triggers whenever shop's finance KYC information was updated</li>
</ul>
</div> ]]></description>
    <pubDate>Tue, 01 Apr 2025 16:00:00 +0000</pubDate>
    <atom:published>2025-04-01T16:00:00.000Z</atom:published>
    <atom:updated>2025-04-01T16:00:00.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <category>Admin GraphQL API</category>
    <category>Events &amp; webhooks</category>
    <category>2025-04</category>
    <link>https://shopify.dev/changelog/new-finance-kyc-information-field-available-for-shopify-approved-finance-apps</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/new-finance-kyc-information-field-available-for-shopify-approved-finance-apps</guid>
  </item>
  <item>
    <title>New enum values for `FulfillmentOrderRejectionReason`</title>
    <description><![CDATA[ <div class=""><p>We've added the following new values to the <code>FulfillmentOrderRejectionReason</code> enum:</p>
<ul>
<li><a href="https://shopify.dev/docs/api/admin-graphql/2025-04/enums/FulfillmentOrderRejectionReason#value-internationalshippingunavailable" target="_blank" class="body-link"><code>INTERNATIONAL_SHIPPING_UNAVAILABLE</code></a>: The fulfillment order was rejected because international address shipping hasn't been enabled.</li>
<li><a href="https://shopify.dev/docs/api/admin-graphql/2025-04/enums/FulfillmentOrderRejectionReason#value-incorrectproductinfo" target="_blank" class="body-link"><code>INCORRECT_PRODUCT_INFO</code></a>: The fulfillment order was rejected because product information is incorrect to be able to ship.</li>
<li><a href="https://shopify.dev/docs/api/admin-graphql/2025-04/enums/FulfillmentOrderRejectionReason#value-invalidcontactinformation" target="_blank" class="body-link"><code>INVALID_CONTACT_INFORMATION</code></a>: The fulfillment order was rejected because of invalid customer contact information.</li>
<li><a href="https://shopify.dev/docs/api/admin-graphql/2025-04/enums/FulfillmentOrderRejectionReason#value-invalidsku" target="_blank" class="body-link"><code>INVALID_SKU</code></a>: The fulfillment order was rejected because of an invalid SKU.</li>
<li><a href="https://shopify.dev/docs/api/admin-graphql/2025-04/enums/FulfillmentOrderRejectionReason#value-merchantblockedorsuspended" target="_blank" class="body-link"><code>MERCHANT_BLOCKED_OR_SUSPENDED</code></a>: The fulfillment order was rejected because the merchant is blocked or suspended.</li>
<li><a href="https://shopify.dev/docs/api/admin-graphql/2025-04/enums/FulfillmentOrderRejectionReason#value-missingcustomsinfo" target="_blank" class="body-link"><code>MISSING_CUSTOMS_INFO</code></a>: The fulfillment order was rejected because customs information was missing for international shipping.</li>
<li><a href="https://shopify.dev/docs/api/admin-graphql/2025-04/enums/FulfillmentOrderRejectionReason#value-ordertoolarge" target="_blank" class="body-link"><code>ORDER_TOO_LARGE</code></a>: The fulfillment order was rejected because the order is too large.</li>
<li><a href="https://shopify.dev/docs/api/admin-graphql/2025-04/enums/FulfillmentOrderRejectionReason#value-packagepreferencenotset" target="_blank" class="body-link"><code>PACKAGE_PREFERENCE_NOT_SET</code></a>: The fulfillment order was rejected because the package preference was not set.</li>
<li><a href="https://shopify.dev/docs/api/admin-graphql/2025-04/enums/FulfillmentOrderRejectionReason#value-paymentdeclined" target="_blank" class="body-link"><code>PAYMENT_DECLINED</code></a>: The fulfillment order was rejected because the payment method was declined.</li>
</ul>
</div> ]]></description>
    <pubDate>Tue, 01 Apr 2025 16:00:00 +0000</pubDate>
    <atom:published>2025-04-01T16:00:00.000Z</atom:published>
    <atom:updated>2025-04-01T16:00:00.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <category>Admin GraphQL API</category>
    <category>2025-04</category>
    <link>https://shopify.dev/changelog/new-enum-values-for-fulfillmentorderrejectionreason</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/new-enum-values-for-fulfillmentorderrejectionreason</guid>
  </item>
  <item>
    <title>New theme file metadata fields added to `OnlineStoreThemeFileOperationResult ` object</title>
    <description><![CDATA[ <div class=""><p>Developers can now retrieve theme file metadata directly in the response body of a successful <code>themeFilesUpsert</code> mutation using the Admin GraphQL API. This eliminates the need for additional fetch requests to verify changes to files after updates. For detailed information, please refer to the latest documentation on <a href="https://shopify.dev/docs/api/admin-graphql/latest/objects/OnlineStoreThemeFileOperationResult" target="_blank" class="body-link"><code>OnlineStoreThemeFileOperationResult</code></a>.</p>
</div> ]]></description>
    <pubDate>Tue, 01 Apr 2025 16:00:00 +0000</pubDate>
    <atom:published>2025-04-01T16:00:00.000Z</atom:published>
    <atom:updated>2025-04-01T16:00:00.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <category>Admin GraphQL API</category>
    <category>2025-04</category>
    <link>https://shopify.dev/changelog/new-theme-file-metadata-fields-added-to-onlinestorethemefileoperationresult-object</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/new-theme-file-metadata-fields-added-to-onlinestorethemefileoperationresult-object</guid>
  </item>
  <item>
    <title>Expanded control of privacy settings using the GraphQL Admin API</title>
    <description><![CDATA[ <div class=""><p>With API version 2025-04, you can manage privacy settings, including status and geotargeting, for first-party features: </p>
<ul>
<li><strong>Privacy settings status</strong>: View the status of first-party privacy settings, such as the cookie banner, data sale opt-out page, and privacy policy.</li>
<li><strong>Enable/disable settings</strong>: Modify first-party privacy settings, including the cookie banner, data sale opt-out page, and automation for the privacy policy.</li>
<li><strong>Regional control for cookie consent</strong>: View or modify which regions and countries require opt-in consent via the cookie banner.</li>
<li><strong>Data sale opt-out management</strong>: View or modify the regions and countries where opting out of data sale is allowed.</li>
</ul>
<p>These enhancements can help you create a smoother onboarding process for new merchants by allowing your privacy-related partner app to customize a merchant’s settings.</p>
<p>For more information on using these new privacy settings features through the GraphQL Admin API, refer to the <a href="/docs/api/admin-graphql/2025-04/objects/PrivacySettings" target="_blank" class="body-link">API documentation</a>.</p>
</div> ]]></description>
    <pubDate>Tue, 01 Apr 2025 16:00:00 +0000</pubDate>
    <atom:published>2025-04-01T16:00:00.000Z</atom:published>
    <atom:updated>2025-04-01T16:00:00.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <category>Admin GraphQL API</category>
    <category>2025-04</category>
    <link>https://shopify.dev/changelog/expanded-control-of-privacy-settings-using-the-graphql-admin-api</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/expanded-control-of-privacy-settings-using-the-graphql-admin-api</guid>
  </item>
  <item>
    <title>New enum values for `CustomerPaymentMethodRevocationReason`</title>
    <description><![CDATA[ <div class=""><p>We've added the following new values to the <code>CustomerPaymentMethodRevocationReason</code> enum:</p>
<ul>
<li><a href="https://shopify.dev/docs/api/admin-graphql/2025-04/enums/customerpaymentmethodrevocationreason#value-customerredacted" target="_blank" class="body-link"><code>CUSTOMER_REDACTED</code></a>: A payment method is redacted for reasons such as GDPR compliance.</li>
<li><a href="https://shopify.dev/docs/api/admin-graphql/2025-04/enums/customerpaymentmethodrevocationreason#value-toomanyconsecutivefailures" target="_blank" class="body-link"><code>TOO_MANY_CONSECUTIVE_FAILURES</code></a>: A payment method has 30 consecutive failures within 35 days.</li>
<li><a href="https://shopify.dev/docs/api/admin-graphql/2025-04/enums/customerpaymentmethodrevocationreason#value-cvvattemptslimitexceeded" target="_blank" class="body-link"><code>CVV_ATTEMPTS_LIMIT_EXCEEDED</code></a>: A buyer repeatedly fails to provide the CVV for card-on-file checkouts.</li>
</ul>
</div> ]]></description>
    <pubDate>Tue, 01 Apr 2025 16:00:00 +0000</pubDate>
    <atom:published>2025-04-01T16:00:00.000Z</atom:published>
    <atom:updated>2025-04-01T16:00:00.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <category>Admin GraphQL API</category>
    <category>2025-04</category>
    <link>https://shopify.dev/changelog/add-new-customerpaymentmethodrevocationreasons</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/add-new-customerpaymentmethodrevocationreasons</guid>
  </item>
  <item>
    <title>New fees and net fields for balance transactions</title>
    <description><![CDATA[ <div class=""><p>As of API version 2025-04, you can view the fees and net amount in adjustment orders for balance transactions using the GraphQL Admin API and REST Admin API. These fields are helpful in financial reconciliation, where balance adjustments are used for multiple order transactions. </p>
<ul>
<li>In the GraphQL Admin API, the <code>fees</code> and <code>net</code> fields are available under the <a href="https://shopify.dev/docs/api/admin-graphql/2025-04/objects/ShopifyPaymentsBalanceTransaction#field-adjustmentsorders" target="_blank" class="body-link"><code>adjustmentsOrders</code></a> field on the <code>ShopifyPaymentsBalanceTransaction</code> object. </li>
<li>In the REST Admin API, the <code>fee</code> and <code>net</code> properties are available under the <code>adjustment_order_transactions</code> property on the <a href="https://shopify.dev/docs/api/admin-rest/2025-04/resources/transactions" target="_blank" class="body-link"><code>Transactions</code></a> resource.</li>
</ul>
</div> ]]></description>
    <pubDate>Tue, 01 Apr 2025 16:00:00 +0000</pubDate>
    <atom:published>2025-04-01T16:00:00.000Z</atom:published>
    <atom:updated>2025-04-01T16:00:00.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <category>Admin GraphQL API</category>
    <category>Admin REST API</category>
    <category>2025-04</category>
    <link>https://shopify.dev/changelog/new-fees-and-net-fields-for-balance-transactions</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/new-fees-and-net-fields-for-balance-transactions</guid>
  </item>
  <item>
    <title>Combined Listings Update Mutation Enhancements</title>
    <description><![CDATA[ <div class=""><p>As of Admin API 2025-05, we have introduced new error codes that will be returned from the <code>combinedListingUpdate</code> mutation. These new errors are to provide more clarity when the mutation is called with incorrect data. </p>
<ul>
<li><code>option_name_contains_invalid_characters</code> will be returned when there are invalid sequences of characters in an Option Name. For example, <code>/</code> is an invalid sequence (space + / + space)</li>
</ul>
</div> ]]></description>
    <pubDate>Tue, 01 Apr 2025 11:00:00 +0000</pubDate>
    <atom:published>2025-04-01T11:00:00.000Z</atom:published>
    <atom:updated>2025-04-01T11:00:00.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <category>Admin GraphQL API</category>
    <category>2025-04</category>
    <link>https://shopify.dev/changelog/combined-listings-update-mutation-enhancements</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/combined-listings-update-mutation-enhancements</guid>
  </item>
  <item>
    <title>View gift card maximum values</title>
    <description><![CDATA[ <div class=""><p>You can now retrieve the maximum values for gift cards using the <a href="https://shopify.dev/docs/api/admin-graphql/2025-04/queries/giftCardConfiguration" target="_blank" class="body-link"><code>giftCardConfiguration</code></a> query. There are separate maximum values for purchased and issued gift cards.</p>
<p>Learn more about <a href="https://help.shopify.com/en/manual/products/gift-card-products" target="_blank" class="body-link">creating and selling gift cards</a>.</p>
</div> ]]></description>
    <pubDate>Tue, 01 Apr 2025 05:00:00 +0000</pubDate>
    <atom:published>2025-04-01T05:00:00.000Z</atom:published>
    <atom:updated>2025-04-01T05:00:00.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <category>Admin GraphQL API</category>
    <category>2025-04</category>
    <link>https://shopify.dev/changelog/view-gift-card-maximum-values</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/view-gift-card-maximum-values</guid>
  </item>
  <item>
    <title>Developer Preview: Localhost-based development for `shopify app dev`</title>
    <description><![CDATA[ <div class=""><p>Now in developer preview, you can serve your app using <code>localhost</code> (<code>127.0.0.1</code>) with a self-signed HTTPS certificate, which Shopify CLI generates for you. This allows you to develop some Shopify app features without the use of network tunnels.</p>
<p>To serve your app using localhost, run the following command using Shopify CLI 3.77 or higher:</p>
<pre><code>shopify app dev --use-localhost
</code></pre>
<p><strong>Note:</strong> Localhost-based development isn't compatible with the Shopify features that directly invoke your app, such as Webhooks, App proxy, and Flow actions, and features that require you to test your app from another device, such as POS.</p>
<p>For more information, you can read about <a href="https://shopify.dev/docs/apps/build/cli-for-apps/networking-options" target="_blank" class="body-link">networking options for local development</a>.</p>
<p>Please report any issues and provide your feedback about this feature <a href="https://community.shopify.dev/new-topic?category=shopify-cli-libraries&tags=app-dev-on-localhost" target="_blank" class="body-link">on the Shopify Developer Community</a>.</p>
</div> ]]></description>
    <pubDate>Tue, 01 Apr 2025 04:00:00 +0000</pubDate>
    <atom:published>2025-04-01T04:00:00.000Z</atom:published>
    <atom:updated>2025-04-02T18:25:34.000Z</atom:updated>
    <category>Tools</category>
    <category>New</category>
    <link>https://shopify.dev/changelog/developer-preview-localhost-based-development-for-shopify-app-dev</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/developer-preview-localhost-based-development-for-shopify-app-dev</guid>
  </item>
  <item>
    <title>New `articleAuthors` query in the GraphQL Admin API</title>
    <description><![CDATA[ <div class=""><p>We've added an <code>articleAuthors</code> query to the GraphQL Admin API. You can use this query to fetch a list of article authors for a store.</p>
</div> ]]></description>
    <pubDate>Tue, 01 Apr 2025 04:00:00 +0000</pubDate>
    <atom:published>2025-04-01T04:00:00.000Z</atom:published>
    <atom:updated>2025-04-01T04:00:00.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <category>Admin GraphQL API</category>
    <category>2025-04</category>
    <link>https://shopify.dev/changelog/new-articleauthors-query-in-the-graphql-admin-api</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/new-articleauthors-query-in-the-graphql-admin-api</guid>
  </item>
  <item>
    <title>New filter options added to `pages`, `articles`, and `comments` queries</title>
    <description><![CDATA[ <div class=""><p>We've introduced the following new query parameters to the <a href="https://shopify.dev/docs/api/admin-graphql/2025-04/queries/articles" target="_blank" class="body-link"><code>articles</code></a>, <a href="https://shopify.dev/docs/api/admin-graphql/2025-04/queries/pages" target="_blank" class="body-link"><code>pages</code> </a> , and <a href="https://shopify.dev/docs/api/admin-graphql/2025-04/queries/comments" target="_blank" class="body-link"><code>comments</code></a> queries in the GraphQL Admin API:</p>
<ul>
<li>You can now filter articles by <code>blog_id</code>, <code>handle</code>, and <code>published_at</code> values</li>
<li>You can now filter pages by <code>published_status</code>, <code>published_at</code>, and <code>id</code> values</li>
<li>You can now filter comments by <code>created_at</code>, <code>updated_at</code>, and <code>published_at</code> values</li>
</ul>
<p>With these changes, <code>articles</code>, <code>pages</code>, and <code>comments</code> queries have fill filter parity with the REST Admin API.</p>
</div> ]]></description>
    <pubDate>Tue, 01 Apr 2025 04:00:00 +0000</pubDate>
    <atom:published>2025-04-01T04:00:00.000Z</atom:published>
    <atom:updated>2025-04-01T04:00:00.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <category>Admin GraphQL API</category>
    <category>2025-04</category>
    <link>https://shopify.dev/changelog/new-filter-options-added-to-pages-articles-and-comments</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/new-filter-options-added-to-pages-articles-and-comments</guid>
  </item>
  <item>
    <title>New field `fulfillmentStatus` added to the `Order` type of the Customer Account API</title>
    <description><![CDATA[ <div class=""><p>As of API version 2025-04, we've introduced the field <a href="https://shopify.dev/docs/api/customer/2025-04/objects/Order#field-fulfillmentstatus" target="_blank" class="body-link"><code>fulfillmentStatus</code></a> to the <code>Order</code>object. This field represents the order's aggregated fulfillment status for display purposes.</p>
</div> ]]></description>
    <pubDate>Tue, 01 Apr 2025 04:00:00 +0000</pubDate>
    <atom:published>2025-04-01T04:00:00.000Z</atom:published>
    <atom:updated>2025-04-01T04:00:00.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <category>Customer Account API</category>
    <category>2025-04</category>
    <link>https://shopify.dev/changelog/new-field-fulfillmentstatus-added-to-the-order-type-of-the-customer-account-api</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/new-field-fulfillmentstatus-added-to-the-order-type-of-the-customer-account-api</guid>
  </item>
  <item>
    <title>Shopify.dev MCP Server</title>
    <description><![CDATA[ <div class=""><p>We're excited to announce the release of the new Shopify.dev MCP Server! The MCP server gives your AI assistant access to Shopify's development resources, enabling it to search our docs, introspect API schemas, and get up-to-date answers about Shopify APIs. Now you can harness the full potential of the dev assistant directly within Cursor or Claude desktop.</p>
<p>Configure your <a href="https://shopify.dev/docs/apps/build/devmcp" target="_blank" class="body-link">Shopify dev MCP</a> server and take it for a spin!</p>
</div> ]]></description>
    <pubDate>Mon, 31 Mar 2025 19:30:00 +0000</pubDate>
    <atom:published>2025-03-31T19:30:00.000Z</atom:published>
    <atom:updated>2025-07-14T23:48:43.000Z</atom:updated>
    <category>Tools</category>
    <category>New</category>
    <link>https://shopify.dev/changelog/mcp-server-for-the-shopify-dev-assistant</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/mcp-server-for-the-shopify-dev-assistant</guid>
  </item>
  <item>
    <title>InventoryItem Webhooks Accessible with Product Scopes</title>
    <description><![CDATA[ <div class=""><p>The scopes for receiving webhooks for the InventoryItem object have been relaxed. <a href="https://shopify.dev/docs/api/admin-graphql/latest/enums/WebhookSubscriptionTopic" target="_blank" class="body-link">Webhook topics</a> for this object can now be configured with either the <code>read_inventory</code> or <code>read_products</code> scope.</p>
<p>Specifically, the following topics can now be configured with either scope:</p>
<ul>
<li><code>INVENTORY_ITEMS_CREATE</code></li>
<li><code>INVENTORY_ITEMS_DELETE</code></li>
<li><code>INVENTORY_ITEMS_UPDATE</code></li>
</ul>
<p>These changes apply to all API versions.</p>
</div> ]]></description>
    <pubDate>Mon, 31 Mar 2025 18:00:00 +0000</pubDate>
    <atom:published>2025-03-31T18:00:00.000Z</atom:published>
    <atom:updated>2025-03-31T18:00:00.000Z</atom:updated>
    <category>API</category>
    <category>Update</category>
    <category>Admin GraphQL API</category>
    <category>Admin REST API</category>
    <link>https://shopify.dev/changelog/inventoryitem-webhooks-accessible-with-product-scopes</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/inventoryitem-webhooks-accessible-with-product-scopes</guid>
  </item>
  <item>
    <title>Expose payment detail fields for Payments Apps API</title>
    <description><![CDATA[ <div class=""><p>We have introduced new input fields to enhance the capture of payment processing details from providers. These fields are designed to improve transaction accuracy and security:</p>
<ul>
<li><p><strong><a href="https://shopify.dev/docs/api/payments-apps/latest/input-objects/PaymentSessionPaymentDetails#fields-cardNotPresent" target="_blank" class="body-link"><code>cardNotPresent</code></a></strong>: <a href="https://shopify.dev/docs/api/payments-apps/latest/input-objects/PaymentSessionCardNotPresentInput" target="_blank" class="body-link"><code>PaymentSessionCardNotPresentInput</code></a>
This field captures details from transactions where the card is not physically present, ensuring accurate processing.</p>
</li>
<li><p><strong><a href="https://shopify.dev/docs/api/payments-apps/latest/input-objects/PaymentSessionPaymentDetails#fields-cardNotPresent.fields.avsResultCode" target="_blank" class="body-link"><code>avsResultCode</code></a></strong>: <a href="https://shopify.dev/docs/api/payments-apps/latest/enums/PaymentSessionCardNotPresentAvsResultCode" target="_blank" class="body-link"><code>PaymentSessionCardNotPresentAvsResultCode</code></a>
It records the response code from the Address Verification System (AVS), enhancing security by verifying address details.</p>
</li>
<li><p><strong><a href="https://shopify.dev/docs/api/payments-apps/latest/input-objects/PaymentSessionPaymentDetails#fields-cardNotPresent.fields.cvvResultCode" target="_blank" class="body-link"><code>cvvResultCode</code></a></strong>: <a href="https://shopify.dev/docs/api/payments-apps/latest/enums/PaymentSessionCardNotPresentCvvResultCode" target="_blank" class="body-link"><code>PaymentSessionCardNotPresentCvvResultCode</code></a>
This field indicates whether the Card Verification Value (CVV) was entered correctly, according to the credit card company's response, thus improving fraud prevention.</p>
</li>
</ul>
<p>For more detailed information, please refer to the Payments Apps API specification for <a href="https://shopify.dev/docs/api/payments-apps/latest/input-objects/PaymentSessionPaymentDetails" target="_blank" class="body-link"><code>PaymentSessionPaymentDetails</code></a>.</p>
</div> ]]></description>
    <pubDate>Mon, 31 Mar 2025 16:00:00 +0000</pubDate>
    <atom:published>2025-03-31T16:00:00.000Z</atom:published>
    <atom:updated>2025-07-30T14:17:32.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <category>Payments Apps API</category>
    <category>2025-04</category>
    <link>https://shopify.dev/changelog/expose-payment-detail-fields-for-payments-apps</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/expose-payment-detail-fields-for-payments-apps</guid>
  </item>
  <item>
    <title>Location ID Queryable with Inventory Scopes</title>
    <description><![CDATA[ <div class=""><p>The access scopes for the <code>id</code> field in the <a href="https://shopify.dev/docs/api/admin-graphql/latest/objects/location" target="_blank" class="body-link">Location</a> object have been updated. You can now query this field using either the <code>read_inventory</code> or <code>read_locations</code> scopes.</p>
<p>Key changes include:</p>
<ul>
<li>The <code>location.id</code> field in GraphQL can now be queried with just the <code>read_inventory</code> or <code>read_locations</code> scope.</li>
</ul>
<p>Please note the following restriction:</p>
<ul>
<li>All other fields of the <code>Location</code> object, such as <code>name</code> and <code>address</code>, still require the <code>read_locations</code> scope for querying.</li>
</ul>
<p>These updates apply to all API versions.</p>
</div> ]]></description>
    <pubDate>Mon, 31 Mar 2025 16:00:00 +0000</pubDate>
    <atom:published>2025-03-31T16:00:00.000Z</atom:published>
    <atom:updated>2025-03-31T16:00:00.000Z</atom:updated>
    <category>API</category>
    <category>Update</category>
    <category>Admin GraphQL API</category>
    <link>https://shopify.dev/changelog/location-id-queryable-with-inventory-scopes</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/location-id-queryable-with-inventory-scopes</guid>
  </item>
  <item>
    <title>Storefront API Cart now exposes selling plan errors</title>
    <description><![CDATA[ <div class=""><p>As of version 2025-07 of the GraphQL Storefront API, enhanced error handling for selling plans is introduced. The Cart mutations now expose specific user errors for scenarios involving selling plans:</p>
<ul>
<li><code>VARIANT_REQUIRES_SELLING_PLAN</code>: The error is returned when a merchandise added to the cart requires a selling plan, but none is provided.</li>
<li><code>SELLING_PLAN_NOT_APPLICABLE</code>: The error is returned when a selling plan is added to a merchandise in the cart but is not applicable.</li>
</ul>
</div> ]]></description>
    <pubDate>Mon, 31 Mar 2025 16:00:00 +0000</pubDate>
    <atom:published>2025-03-31T16:00:00.000Z</atom:published>
    <atom:updated>2025-03-31T16:00:00.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <category>Storefront API</category>
    <category>2025-07</category>
    <link>https://shopify.dev/changelog/storefront-api-cart-exposes-selling-plan-errors</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/storefront-api-cart-exposes-selling-plan-errors</guid>
  </item>
  <item>
    <title>New additions to delivery promise participants APIs</title>
    <description><![CDATA[ <div class=""><p>The ability to use locations as delivery promise participants is currently available in the <code>unstable</code> version and is planned for release in the <code>2025-07</code> version of the GraphQL Admin API.</p>
<p>The <code>deliveryPromiseParticipants</code> query and the <code>deliveryPromiseParticipantsUpdate</code> mutation have been enhanced. They now allow you to specify locations that should be excluded from the Shop Promise program. </p>
<p>Additionally, you can use the <code>delivery_promise_participants_handle</code> in the products query. This enables you to filter products with variants that are delivery promise participants and retrieve the list of corresponding delivery promise participants for a specific product variant.</p>
</div> ]]></description>
    <pubDate>Mon, 31 Mar 2025 16:00:00 +0000</pubDate>
    <atom:published>2025-03-31T16:00:00.000Z</atom:published>
    <atom:updated>2025-03-31T16:00:00.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <category>Admin GraphQL API</category>
    <category>2025-07</category>
    <link>https://shopify.dev/changelog/new-additions-to-delivery-promise-participants-apis</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/new-additions-to-delivery-promise-participants-apis</guid>
  </item>
  <item>
    <title>Hydrogen March 2025 Release</title>
    <description><![CDATA[ <div class=""><p>The latest version of Hydrogen v2025.1.3 is out today. The release contains updates to support Vite 6 and <code>v3_route_config</code>:</p>
<ul>
<li>Turn on Remix future flag  <a href="https://remix.run/docs/en/main/start/future-flags#v3_routeconfig" target="_blank" class="body-link"><code>v3_routeConfig</code></a> (<a href="https://github.com/Shopify/hydrogen/pull/2722" target="_blank" class="body-link">#2722</a>)</li>
<li>Bump Remix package dependency to 2.16.2 and support Vite 6 (<a href="https://github.com/Shopify/hydrogen/pull/2784" target="_blank" class="body-link">#2784</a>)</li>
</ul>
<p>Check out our full <a href="https://hydrogen.shopify.dev/update/march-2025" target="_blank" class="body-link">Hydrogen March 2025 release blog post</a>for more details. And please drop your comments, feedback, and suggestions over in <a href="https://github.com/Shopify/hydrogen/discussions" target="_blank" class="body-link">GitHub Discussions</a>!</p>
</div> ]]></description>
    <pubDate>Mon, 31 Mar 2025 15:00:00 +0000</pubDate>
    <atom:published>2025-03-31T15:00:00.000Z</atom:published>
    <atom:updated>2025-03-31T15:00:00.000Z</atom:updated>
    <category>Platform</category>
    <category>Update</category>
    <link>https://shopify.dev/changelog/hydrogen-march-2025-release</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/hydrogen-march-2025-release</guid>
  </item>
  <item>
    <title>Ship and carry out in a single order on POS is now available for Retail Pro Merchants using eligible tax software</title>
    <description><![CDATA[ <div class=""><p>Shopify's Point of Sale (POS) now supports combining ship and carry out items in a single order for Retail Pro Merchants. </p>
<p>If you're a Retail Pro Merchant, you can now include carry out items and items that will ship at a later date in one transaction. Learn more about <a href="https://changelog.shopify.com/posts/ship-and-carryout-in-a-single-order-on-pos" target="_blank" class="body-link">eligibility details</a>.</p>
<h3>Email templates changes</h3>
<p>We've updated the default email templates in the <a href="https://admin.shopify.com/" target="_blank" class="body-link">Shopify admin</a> under <strong>Settings</strong> &gt; <strong>Notification</strong>  for <code>POS and mobile receipt</code>, <code>Order confirmation</code>, <code>Order invoice</code>, and <code>Order edited</code> . </p>
<p>If you use the default template, no action is required. However, if you've customized your template, then we recommend reverting to the default template and reapplying your changes. If you choose not to revert, please review the <a href="https://help.shopify.com/en/manual/fulfillment/setup/notifications/email-variables#delivery-properties" target="_blank" class="body-link"><code>delivery_agreements</code></a> object.</p>
<p>There will be two <a href="https://help.shopify.com/en/manual/fulfillment/setup/notifications/email-variables#delivery-properties" target="_blank" class="body-link"><code>delivery_agreements</code></a> properties for Ship and carry out orders: one for In store and one for Shipping. Loop through the <a href="https://help.shopify.com/en/manual/fulfillment/setup/notifications/email-variables#delivery-properties" target="_blank" class="body-link"><code>delivery_agreements</code></a> to find the line items for each agreement. Key fields include:</p>
<ul>
<li><code>delivery_agreement.delivery_method_name</code>: Indicates if the method is <code>In store</code> or <code>Shipping</code>. This field is translated to the buyer's checkout language.</li>
<li><code>delivery_agreement.line_items</code>: Provides access to the line items specific to the <code>delivery_agreement</code>.</li>
</ul>
<h3>POS receipts template changes</h3>
<p>We've updated the default POS receipt <a href="https://admin.shopify.com/" target="_blank" class="body-link">Shopify admin</a> under <strong>Sales channels</strong> &gt; <strong>Point of Sale</strong>  &gt; <strong>Customize</strong> &gt; <strong>Receipts</strong> for <code>footer.liquid</code> template. It now lists which items are shipped. </p>
<p>If you use the default footer template, no action is required. However, if you've customized your template, then we recommend reverting to the default footer template and reapplying your changes. If you choose not to revert, please review the <a href="https://help.shopify.com/en/manual/sell-in-person/shopify-pos/receipt-management/receipt-editor#edit-your-receipt-templates" target="_blank" class="body-link"><code>shipping_groups</code></a> object inside the <a href="https://help.shopify.com/en/manual/sell-in-person/shopify-pos/receipt-management/receipt-editor#edit-your-receipt-templates" target="_blank" class="body-link"><code>order</code></a> object to find all the items that are being shipped.</p>
<h3>Behavior changes to the <a href="https://shopify.dev/docs/api/admin-graphql/latest/objects/Order" target="_blank" class="body-link">Order</a> and <a href="https://shopify.dev/docs/api/admin-graphql/latest/objects/FulfillmentOrder" target="_blank" class="body-link">FulfillmentOrder</a> objects for Ship and carry out orders</h3>
<p>The following is the high level impact to <a href="https://shopify.dev/docs/api/admin-graphql/latest/objects/Order" target="_blank" class="body-link"><code>Order</code></a>  and <a href="https://shopify.dev/docs/api/admin-graphql/latest/objects/FulfillmentOrder" target="_blank" class="body-link"><code>FulfillmentOrder</code></a> objects for Ship and carry out orders:</p>
<ul>
<li><a href="https://shopify.dev/docs/api/admin-graphql/latest/objects/Order#field-taxlines" target="_blank" class="body-link"><code>Order.taxLines</code></a> contains the tax lines for both the carry out and ship portions of the order. To determine which taxes are applied, refer to <a href="https://shopify.dev/docs/api/admin-graphql/latest/objects/Order#connection-lineitems" target="_blank" class="body-link"><code>Order.lineitems</code></a>.<a href="https://shopify.dev/docs/api/admin-graphql/latest/objects/LineItem#field-taxlines" target="_blank" class="body-link"><code>taxLines</code></a>.</li>
<li>Multiple fulfillment orders are  generated for a POS order that contains both Ship and carry out items. The <a href="https://shopify.dev/docs/api/admin-graphql/latest/objects/DeliveryMethod#field-methodtype" target="_blank" class="body-link"><code>deliveryMethod.methodType</code></a> will either be <code>RETAIL</code> or <code>SHIPPING</code>.</li>
</ul>
<p>Check out some GraphQL examples for the <a href="https://shopify.dev/docs/api/admin-graphql/latest/queries/order?example=Retrieves+tax+related+information+for+a+given+order" target="_blank" class="body-link"><code>order</code></a> and <a href="https://shopify.dev/docs/api/admin-graphql/latest/queries/order?example=Retrieves+a+list+of+fulfillment+orders+for+a+specific+order" target="_blank" class="body-link"><code>fulfillmentOrder</code></a> queries.</p>
<p>The following are relevant fields of the <a href="https://shopify.dev/docs/api/admin-graphql/latest/objects/Order" target="_blank" class="body-link"><code>Order</code></a> object and the <a href="https://shopify.dev/docs/api/admin-graphql/latest/objects/FulfillmentOrder" target="_blank" class="body-link"><code>FulfillmentOrder</code></a> object for a Ship and carry out order.</p>
<h4><a href="https://shopify.dev/docs/api/admin-graphql/latest/objects/Order" target="_blank" class="body-link">Order</a> object</h4>
<ul>
<li><a href="https://shopify.dev/docs/api/admin-graphql/latest/objects/Order#field-taxlines" target="_blank" class="body-link"><code>Order.taxLines</code></a>: Stores the tax lines for the entire order, as generated by the configured tax software during checkout. For taxes charged on each <code>LineItem</code>, refer to <code>Order.lineitems[x].taxLines</code>, where <code>x</code> denotes the array index.</li>
<li><a href="https://shopify.dev/docs/api/admin-graphql/latest/objects/Order#field-fulfillments" target="_blank" class="body-link"><code>Order.fulfillments</code></a>: Contains only the fulfilled parts of the order. Initially, it only displays the carry out portion. After the ship portion of the order is fulfilled, it will be listed here as well.</li>
<li><a href="https://shopify.dev/docs/api/admin-graphql/latest/objects/Order#field-shippingaddress" target="_blank" class="body-link"><code>Order.shippingAddress</code></a>: Contains the shipping address of the ship portion of the order.</li>
<li><a href="https://shopify.dev/docs/api/admin-graphql/latest/objects/Order#connection-shippinglines" target="_blank" class="body-link"><code>Order.shippingLines</code></a>: Contains the shipping lines that are relevant to the ship portion of the order.</li>
<li><a href="https://shopify.dev/docs/api/admin-graphql/latest/objects/Order#connection-lineitems" target="_blank" class="body-link"><code>Order.lineitems</code></a>.<a href="https://shopify.dev/docs/api/admin-graphql/latest/objects/LineItem#field-taxlines" target="_blank" class="body-link">taxLines</a>: The tax lines for this specific line item.</li>
</ul>
<h4><a href="https://shopify.dev/docs/api/admin-graphql/latest/objects/FulfillmentOrder" target="_blank" class="body-link">FulfillmentOrder</a> object</h4>
<p>For a given Ship and carry out order, there will be at least two <a href="https://shopify.dev/docs/api/admin-graphql/latest/objects/FulfillmentOrder" target="_blank" class="body-link"><code>FulfillmentOrder</code></a> objects. One <a href="https://shopify.dev/docs/api/admin-graphql/latest/objects/FulfillmentOrder" target="_blank" class="body-link"><code>FulfillmentOrder</code></a> for the carry out and separate objects for ship portions.</p>
<ul>
<li><a href="https://shopify.dev/docs/api/admin-graphql/latest/objects/FulfillmentOrder#field-deliverymethod" target="_blank" class="body-link"><code>FulfillmentOrder.deliveryMethod</code></a>: Describes the delivery method for the fulfillment order. The <a href="https://shopify.dev/docs/api/admin-graphql/latest/objects/DeliveryMethod#field-methodtype" target="_blank" class="body-link"><code>deliveryMethod.methodType</code></a> will either be <code>RETAIL</code> or <code>SHIPPING</code>.</li>
<li><a href="https://shopify.dev/docs/api/admin-graphql/latest/objects/FulfillmentOrder#connection-lineitems" target="_blank" class="body-link"><code>FulfillmentOrder.lineItems</code></a>: Contains the lines items for the specific fulfillment order. The fulfillment order with <a href="https://shopify.dev/docs/api/admin-graphql/latest/objects/DeliveryMethod#field-methodtype" target="_blank" class="body-link"><code>deliveryMethod.methodType</code></a> set to <code>RETAIL</code> will only have the carry out line items. The fulfillment order with <a href="https://shopify.dev/docs/api/admin-graphql/latest/objects/DeliveryMethod#field-methodtype" target="_blank" class="body-link"><code>deliveryMethod.methodType</code></a> set to <code>SHIPPING</code> will only have the ship line items.</li>
</ul>
</div> ]]></description>
    <pubDate>Mon, 31 Mar 2025 13:00:00 +0000</pubDate>
    <atom:published>2025-03-31T13:00:00.000Z</atom:published>
    <atom:updated>2025-03-31T13:00:00.000Z</atom:updated>
    <category>Built for Shopify</category>
    <category>New</category>
    <link>https://shopify.dev/changelog/ship-carry-out-in-a-single-order-on-pos-is-now-available-for-retail-pro-merchants-using-eligible-tax-software</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/ship-carry-out-in-a-single-order-on-pos-is-now-available-for-retail-pro-merchants-using-eligible-tax-software</guid>
  </item>
  <item>
    <title>App Bridge Title Bar visual update</title>
    <description><![CDATA[ <div class=""><p>Apps will see an improved visual appearance of the <a href="https://shopify.dev/docs/api/app-bridge-library/web-components/ui-title-bar" target="_blank" class="body-link">App Bridge Title Bar API</a> starting to rollout, to match the new experience in the Shopify admin. </p>
<p>No developer action is required. The new experience will work with the existing API.  </p>
</div> ]]></description>
    <pubDate>Mon, 31 Mar 2025 11:00:00 +0000</pubDate>
    <atom:published>2025-03-31T11:00:00.000Z</atom:published>
    <atom:updated>2025-03-31T11:00:00.000Z</atom:updated>
    <category>Platform</category>
    <category>Update</category>
    <link>https://shopify.dev/changelog/app-bridge-title-bar-visual-update</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/app-bridge-title-bar-visual-update</guid>
  </item>
  <item>
    <title>POS UI Extensions 2025-04 Update</title>
    <description><![CDATA[ <div class=""><p>As of April 1, 2025, we made the following updates to POS UI Extensions:</p>
<h3>Features</h3>
<p><strong>Developer Preview</strong></p>
<ul>
<li>Added support for the <a href="https://shopify.dev/docs/api/pos-ui-extensions/targets/post-purchase/pos-transaction-complete-event-observe" target="_blank" class="body-link"><code>pos.transaction-complete.event.observe</code></a> target.</li>
<li>Added support for the <a href="https://shopify.dev/docs/api/pos-ui-extensions/unstable/targets/cart-details/pos-cart-update-event-observe" target="_blank" class="body-link"><code>pos.cart-update.event.observe</code></a> target.</li>
<li>Added support for <a href="https://shopify.dev/docs/api/pos-ui-extensions/targets/cash-tracking/pos-cash-tracking-session-start-event-observe" target="_blank" class="body-link"><code>pos.cash-tracking-session-start.event.observe</code></a> and <a href="https://shopify.dev/docs/api/pos-ui-extensions/targets/cash-tracking/pos-cash-tracking-session-complete-event-observe" target="_blank" class="body-link"><code>pos.cash-tracking-session-complete.event.observe</code></a> targets.</li>
<li>Added support for the <a href="https://shopify.dev/docs/api/pos-ui-extensions/targets/receipts/pos-receipt-footer-block-render" target="_blank" class="body-link"><code>pos.receipt-footer.block.render</code></a> target.</li>
<li>Introduced a <a href="https://shopify.dev/docs/api/pos-ui-extensions/components/posreceiptblock" target="_blank" class="body-link"><code>POSReceiptBlock</code></a> component, which is the required parent component for <a href="https://shopify.dev/docs/api/pos-ui-extensions/targets/receipts/pos-receipt-footer-block-render" target="_blank" class="body-link">pos.receipt-footer.block.render</a> targets.</li>
<li>Introduced a <a href="https://shopify.dev/docs/api/pos-ui-extensions/unstable/components/qrcode" target="_blank" class="body-link"><code>QRCode</code></a> component.</li>
</ul>
<p>All of the changes are available for POS UI extensions version 2025-04 and POS app version 9.31.0. For all version details, refer to the <a href="https://shopify.dev/docs/api/pos-ui-extensions/unstable/versions" target="_blank" class="body-link">version log</a>.</p>
</div> ]]></description>
    <pubDate>Fri, 28 Mar 2025 16:00:00 +0000</pubDate>
    <atom:published>2025-03-28T16:00:00.000Z</atom:published>
    <atom:updated>2025-04-09T00:28:21.000Z</atom:updated>
    <category>API</category>
    <category>Update</category>
    <category>POS Extensions</category>
    <category>2025-04</category>
    <link>https://shopify.dev/changelog/pos-ui-extensions-2025-04-update</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/pos-ui-extensions-2025-04-update</guid>
  </item>
  <item>
    <title>Liquid support for OKLCH colors</title>
    <description><![CDATA[ <div class=""><p>We've introduced support for OKLCH colors in Liquid, enabling more natural color transitions and access to a broader range of colors than sRGB.</p>
<p>New features include:</p>
<ul>
<li>The <a href="/docs/api/liquid/filters/color_to_oklch" target="_blank" class="body-link"><code>color_to_oklch</code></a> filter, which takes a <code>color</code> object or string and returns an OKLCH color string.</li>
<li>Enhanced <a href="/docs/api/liquid/objects/color" target="_blank" class="body-link"><code>color</code></a> objects with new properties: <a href="/docs/api/liquid/filters/color_to_oklch" target="_blank" class="body-link"><code>color_space</code></a>, <a href="/docs/api/liquid/objects/color#color-chroma" target="_blank" class="body-link"><code>chroma</code></a>, <a href="/docs/api/liquid/objects/color#color-oklch" target="_blank" class="body-link"><code>oklch</code></a>, and <a href="/docs/api/liquid/objects/color#color-oklcha" target="_blank" class="body-link"><code>oklcha</code></a>. These allow you to access OKLCH channels and convert color objects into the OKLCH color space.</li>
<li>Color filters like <a href="/docs/api/liquid/filters#color_saturate" target="_blank" class="body-link"><code>color_saturate</code></a> now operate within the OKLCH color space.</li>
</ul>
<p>Explore the <a href="/docs/api/liquid" target="_blank" class="body-link">Liquid docs</a> to learn more about OKLCH and start integrating these vibrant colors into your projects today.</p>
</div> ]]></description>
    <pubDate>Thu, 27 Mar 2025 16:00:00 +0000</pubDate>
    <atom:published>2025-03-27T16:00:00.000Z</atom:published>
    <atom:updated>2025-03-27T16:00:00.000Z</atom:updated>
    <category>Themes</category>
    <category>New</category>
    <link>https://shopify.dev/changelog/liquid-support-for-oklch-colors</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/liquid-support-for-oklch-colors</guid>
  </item>
  <item>
    <title>Re-enabled customer search terms in the GraphQL and REST Admin APIs</title>
    <description><![CDATA[ <div class=""><p>We've re-enabled several customer-related <code>query</code> terms in all versions of the <a href="/docs/api/admin-graphql/2024-07/queries/customers#argument-query" target="_blank" class="body-link">GraphQL Admin API</a> and <a href="/docs/api/admin-rest/2024-07/resources/customer#get-customers-search?query=email:bob.norman@mail.example.com" target="_blank" class="body-link">REST Admin API</a>.</p>
<p>Version 2024-07 of these APIs disabled the following <code>query</code> terms for searching customers:</p>
<ul>
<li><code>accepts_marketing</code></li>
<li><code>city</code></li>
<li><code>company</code></li>
<li><code>country</code></li>
<li><code>customer_date</code></li>
<li><code>email_marketing_state</code></li>
<li><code>last_abandoned_order_date</code></li>
<li><code>order_date</code></li>
<li><code>orders_count</code></li>
<li><code>province</code></li>
<li><code>sms_marketing_state</code></li>
<li><code>state</code></li>
<li><code>tag</code></li>
<li><code>tag_not</code></li>
<li><code>territory_code</code></li>
<li><code>total_spent</code></li>
</ul>
<p>These options have been re-enabled across all API versions, allowing for more specific customer searches. For more details, refer to the <a href="/docs/api/admin-graphql/2024-07/queries/customers#argument-query" target="_blank" class="body-link">GraphQL Admin API documentation</a> and the <a href="/docs/api/admin-rest/2024-07/resources/customer#get-customers-search?query=email:bob.norman@mail.example.com" target="_blank" class="body-link">REST Admin API documentation</a>.</p>
</div> ]]></description>
    <pubDate>Wed, 26 Mar 2025 16:00:00 +0000</pubDate>
    <atom:published>2025-03-26T16:00:00.000Z</atom:published>
    <atom:updated>2025-03-26T16:00:00.000Z</atom:updated>
    <category>API</category>
    <category>Update</category>
    <category>Admin GraphQL API</category>
    <category>Admin REST API</category>
    <link>https://shopify.dev/changelog/re-enabled-customer-search-terms</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/re-enabled-customer-search-terms</guid>
  </item>
  <item>
    <title>Draft Orders automatically purged after 1 year of inactivity</title>
    <description><![CDATA[ <div class=""><p>Draft orders created on or after April 1, 2025 will be automatically purged after one year of inactivity, simplifying data management and improving performance for apps interacting with draft orders. Automatic removal of inactive draft orders will begin on April 1, 2026.</p>
<p>Learn more about <a href="https://help.shopify.com/en/manual/fulfillment/managing-orders/create-orders/create-draft#delete-draft-order" target="_blank" class="body-link">draft order deletion</a>. </p>
</div> ]]></description>
    <pubDate>Mon, 24 Mar 2025 17:00:00 +0000</pubDate>
    <atom:published>2025-03-24T17:00:00.000Z</atom:published>
    <atom:updated>2025-03-24T17:00:00.000Z</atom:updated>
    <category>API</category>
    <category>Update</category>
    <category>Admin GraphQL API</category>
    <link>https://shopify.dev/changelog/draft-orders-automatically-purged-after-1-year-of-inactivity</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/draft-orders-automatically-purged-after-1-year-of-inactivity</guid>
  </item>
  <item>
    <title>Using custom ids to look up collections, locations, orders, and product variants</title>
    <description><![CDATA[ <div class=""><p>As of 2025-04 Admin API, you can use your own identifiers to lookup more resource types with the following APIs:</p>
<ul>
<li><code>collectionByIdentifier</code></li>
<li><code>locationByIdentifier</code></li>
<li><code>orderByIdentifier</code></li>
<li><code>productVariantByIdentifier</code></li>
</ul>
<p>Custom ids are defined by a new metafield type: id. The unique values capability is required and enabled by default for the id type. The id type unlocks custom ids for Shopify, enabling merchants and partners to specify their own identifiers for objects with metafields.</p>
<p>Support for product and customer lookup by custom id was <a href="https://shopify.dev/changelog/using-custom-ids-and-handles-in-product-and-customer-lookups" target="_blank" class="body-link">announced as part of the 2025-01 API release</a>.</p>
</div> ]]></description>
    <pubDate>Sat, 22 Mar 2025 16:00:00 +0000</pubDate>
    <atom:published>2025-03-22T16:00:00.000Z</atom:published>
    <atom:updated>2025-03-22T16:00:00.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <category>2025-04</category>
    <link>https://shopify.dev/changelog/custom-ids-more-lookups</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/custom-ids-more-lookups</guid>
  </item>
  <item>
    <title>Retail Exchanges now use the Shopify Exchanges implementation</title>
    <description><![CDATA[ <div class=""><p>Retail Exchanges are now supported by the Shopify Exchange Platform. Previously, Retail Exchanges used a separate system called ExchangesV2, which handled exchanges as a combination of a Return and an Order Edit, along with any necessary refunds.</p>
<p>If your shop has opted out of Shopify Exchanges, we will continue to process exchanges using the old system.</p>
<p>Now, Retail Exchanges will create a Return with exchange line items, consolidating several operations into one:</p>
<ul>
<li>Separate sales agreements for the Return and the Order Edit are no longer created. The Return agreement now includes all the sales created from an exchange.  </li>
<li>The same validations and constraints that apply to exchanges on the Return platform also apply to exchanges conducted through Shopify POS.</li>
</ul>
<p>If your integrations or ERP interfaces previously depended on having distinct sales agreements for the Return and the Order Edit, please note that these are now consolidated. The Return agreement now encompasses both operations, so you may need to update your integration to utilize a single sales agreement.</p>
<p>Furthermore, exchanges created in Admin, or via the <code>returnCreate()</code> APIs will now be visible on the <code>Order.exchangeV2s()</code> API. If you are using that API and would like to exclude those “mirrored” exchanges from the API, you can use a <a href="https://shopify.dev/changelog/new-includemirroredexchanges-query-filter-parameter" target="_blank" class="body-link">new <code>include_mirrored_exchanges</code> query filter</a> parameter.</p>
<p>We are <a href="https://shopify.dev/docs/apps/build/pos/exchangesv2deprecation" target="_blank" class="body-link">deprecating</a> the ExchangeV2 APIs and plan to remove them after a 1-year deprecation period. During this time, even though exchanges are created through the Shopify Exchange Platform, they will still be accessible via the <code>Order.exchangeV2s()</code> API.  </p>
</div> ]]></description>
    <pubDate>Fri, 21 Mar 2025 16:00:00 +0000</pubDate>
    <atom:published>2025-03-21T16:00:00.000Z</atom:published>
    <atom:updated>2025-03-21T17:05:55.000Z</atom:updated>
    <category>API</category>
    <category>Update</category>
    <category>Admin GraphQL API</category>
    <link>https://shopify.dev/changelog/retail-exchanges-now-use-the-shopify-exchanges-implementation</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/retail-exchanges-now-use-the-shopify-exchanges-implementation</guid>
  </item>
  <item>
    <title>Ads are now available on mobile, plus more surfaces to target merchants</title>
    <description><![CDATA[ <div class=""><p>Shopify has introduced new advertising options in the App Store, enabling developers to run ads on mobile devices and target merchants based on location or plan type on the homepage and category pages.</p>
<p>Here are the latest updates to enhance your ad management and execution:</p>
<ul>
<li><strong>Mobile ads</strong>: You can now run mobile ads on the Shopify App Store</li>
<li><strong>Ad Auction Types</strong>: You can now set different bid prices for mobile and desktop ads, with options for geotargeting and merchant plan-based targeting.</li>
<li><strong>Ad Reports</strong>: These now include mobile-specific metrics and insights, offering a comprehensive view of your app's performance across various device channels.</li>
<li><strong>Geotargeting and Merchant Plan-Based Targeting</strong>: These features are now extended beyond search results and are available on homepage and category page ads. Note that merchant plan-based targeting is exclusive to apps with <a href="https://shopify.dev/docs/apps/launch/built-for-shopify" target="_blank" class="body-link">Built for Shopify</a> status.</li>
</ul>
<p>You can access these ad features through the Ads Manager in your Partner Dashboard.</p>
<p>For more information, <a href="https://shopify.dev/docs/apps/launch/marketing/advertising/create-ads" target="_blank" class="body-link">learn more here</a>.</p>
</div> ]]></description>
    <pubDate>Wed, 19 Mar 2025 14:00:00 +0000</pubDate>
    <atom:published>2025-03-19T14:00:00.000Z</atom:published>
    <atom:updated>2025-03-19T15:40:05.000Z</atom:updated>
    <category>App store</category>
    <category>New</category>
    <link>https://shopify.dev/changelog/ads-are-now-available-on-mobile-plus-more-surfaces-to-target-merchants</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/ads-are-now-available-on-mobile-plus-more-surfaces-to-target-merchants</guid>
  </item>
  <item>
    <title>FeeSale fee field is nullable as of 2025-07</title>
    <description><![CDATA[ <div class=""><p>As of 2025-07, the <code>FeeSale.fee</code> field is now nullable, meaning a <code>Fee</code> can be null if it has been deleted. In versions prior to 2025-07, the <code>fee</code> field will still return the deleted fee. </p>
<p>For more information, visit the <a href="https://shopify.dev/docs/api/admin-graphql/unstable/objects/FeeSale" target="_blank" class="body-link">Shopify.dev</a> documentation on <code>FeeSale</code>.</p>
</div> ]]></description>
    <pubDate>Tue, 18 Mar 2025 16:00:00 +0000</pubDate>
    <atom:published>2025-03-18T16:00:00.000Z</atom:published>
    <atom:updated>2025-03-18T16:00:00.000Z</atom:updated>
    <category>API</category>
    <category>Breaking API Change</category>
    <category>Admin GraphQL API</category>
    <category>2025-07</category>
    <link>https://shopify.dev/changelog/feesale-fee-field-is-nullable-as-of-2025-07</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/feesale-fee-field-is-nullable-as-of-2025-07</guid>
  </item>
  <item>
    <title>New `include_mirrored_exchanges` query filter parameter</title>
    <description><![CDATA[ <div class=""><p>We've added a new <code>include_mirrored_exchanges</code> <a href="https://shopify.dev/docs/apps/build/pos/exchangesv2#what-data-is-available-in-the-exchangev2s-field" target="_blank" class="body-link">query filter parameter</a> to provide greater flexibility in managing and viewing exchange data using the Retail ExchangeV2 GraphQL Admin API.</p>
<p>The <code>include_mirrored_exchanges</code> query filter parameter controls whether exchanges that are mirrored from the Shopify admin are queryable through the GraphQL Admin API. Only exchanges that are created in the Shopify admin after API version 2025-04 will be queryable with the GraphQL Admin API. Historical exchanges won't be queryable using the API.</p>
<p>To include mirrored exchanges in your API query results, set the parameter to true: <code>query:&quot;include_mirrored_exchanges:true&quot;</code>. This ensures that all exchanges, including those mirrored from the Shopify admin, are visible in the API response. This is the default, so if no query parameter is included, then API query results will include mirrored Shopify admin exchanges.</p>
<p>Conversely, if you want to exclude mirrored exchanges from the results, then set the parameter to false: <code>query:&quot;include_mirrored_exchanges:false&quot;</code>. This filters out any exchanges that are mirrored from the Shopify admin, providing a cleaner dataset.</p>
</div> ]]></description>
    <pubDate>Mon, 17 Mar 2025 16:00:00 +0000</pubDate>
    <atom:published>2025-03-17T16:00:00.000Z</atom:published>
    <atom:updated>2025-03-17T21:26:01.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <category>Admin GraphQL API</category>
    <category>2025-04</category>
    <link>https://shopify.dev/changelog/new-includemirroredexchanges-query-filter-parameter</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/new-includemirroredexchanges-query-filter-parameter</guid>
  </item>
  <item>
    <title>Deprecating PriceListUserErrorCode values</title>
    <description><![CDATA[ <div class=""><p>Starting in API version 2025-04, <a href="https://shopify.dev/docs/api/admin-graphql/unstable/enums/PriceListUserErrorCode" target="_blank" class="body-link">PriceListErrorCode</a> values that are currently not returned by the API will be hidden. These error codes include:</p>
<ul>
<li><code>CATALOG_ASSIGNMENT_NOT_ALLOWED</code></li>
<li><code>CATALOG_CANNOT_CHANGE_CONTEXT_TYPE</code></li>
<li><code>APP_CATALOG_PRICE_LIST_ASSIGNMENT</code></li>
<li><code>CONTEXT_RULE_MARKET_LOCKED</code></li>
</ul>
</div> ]]></description>
    <pubDate>Mon, 17 Mar 2025 13:00:00 +0000</pubDate>
    <atom:published>2025-03-17T13:00:00.000Z</atom:published>
    <atom:updated>2025-03-17T13:00:00.000Z</atom:updated>
    <category>Action Required</category>
    <category>API</category>
    <category>Breaking API Change</category>
    <category>Admin GraphQL API</category>
    <category>2025-04</category>
    <link>https://shopify.dev/changelog/deprecating-pricelistusererrorcode-values</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/deprecating-pricelistusererrorcode-values</guid>
  </item>
  <item>
    <title>Now available: JS Buy SDK v3.0 </title>
    <description><![CDATA[ <div class=""><p>We released the last and final version of JavaScript Buy SDK v3.0 to extend its useful life following the <a href="https://shopify.dev/changelog/deprecation-of-checkout-apis" target="_blank" class="body-link">Checkout API deprecation</a>. Upgrading to v3.0 will extend the grace period of SDK's <code>.checkout</code> interface by replacing it with an equivalent interface based on the <a href="https://shopify.dev/docs/api/storefront/2025-01/objects/Cart" target="_blank" class="body-link">Cart API</a> with some limitations inherent to the different scope of both APIs. See this <a href="https://github.com/Shopify/js-buy-sdk/blob/main/README.md#how-to-upgrade-to-v30" target="_blank" class="body-link">upgrade guide</a> with supported use cases to help the transition. </p>
<p>The other option to remain operational is to switch to the <a href="https://github.com/Shopify/shopify-app-js/tree/main/packages/api-clients/storefront-api-client#readme" target="_blank" class="body-link">Storefront API Client</a>, which manages the API’s authentication information and provides various methods that enable devs to interact with the API. See this <a href="https://github.com/Shopify/js-buy-sdk/tree/main/migration-guide" target="_blank" class="body-link">migration guide</a> for more details.   </p>
<p><strong>Critical Deadline: July 1, 2025 11:00 AM ET</strong>. You must implement one of these changes by this date, or customers will not be able to complete purchases. Please choose the option that best suits your needs and timelines.</p>
</div> ]]></description>
    <pubDate>Thu, 13 Mar 2025 17:00:00 +0000</pubDate>
    <atom:published>2025-03-13T17:00:00.000Z</atom:published>
    <atom:updated>2025-03-13T17:00:00.000Z</atom:updated>
    <category>Action Required</category>
    <category>API</category>
    <category>Breaking API Change</category>
    <link>https://shopify.dev/changelog/now-available-js-buy-sdk-v30</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/now-available-js-buy-sdk-v30</guid>
  </item>
  <item>
    <title>Adding defaultPhoneNumber field to Customer</title>
    <description><![CDATA[ <div class=""><p>As of GraphQL Admin API version <strong>2025-04</strong>, the <code>defaultPhoneNumber</code> field is introduced on the <code>Customer</code> object to support querying a customer's phone number and marketing state.</p>
<p>Learn more about the <code>Customer</code> fields on <a href="https://shopify.dev/docs/api/admin-graphql/2025-04/objects/Customer" target="_blank" class="body-link">Shopify.dev</a>.</p>
</div> ]]></description>
    <pubDate>Tue, 11 Mar 2025 16:00:00 +0000</pubDate>
    <atom:published>2025-03-11T16:00:00.000Z</atom:published>
    <atom:updated>2025-03-11T16:00:00.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <category>Admin GraphQL API</category>
    <link>https://shopify.dev/changelog/adding-defaultphonenumber-field-to-customer</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/adding-defaultphonenumber-field-to-customer</guid>
  </item>
  <item>
    <title>Support added for app-owned metafields</title>
    <description><![CDATA[ <div class=""><p>In the <code>2025-04</code> API versions of Checkout and Customer Account UI extension APIs, we've enhanced the <code>appMetafield</code> API to support reading app owned metafields. These metafields give you greater control over your application's data, as your app manages both the data and its visibility.</p>
<p>To read app-owned metafields, you must request them in your extension configuration <code>toml</code> file using the <code>$app</code> format in the namespace. This configuration makes app-owned metafields accessible through the <code>appMetafield</code> API in your UI extension code. Note that while you can read these metafields, writing to them is not permitted.</p>
<p>Currently, app-owned metafields are available in the <code>unstable</code> version and will be included in stable versions starting from <code>2025-04</code>.</p>
<p>For more details, please refer to the metafield configuration guide for the <a href="https://shopify.dev/docs/api/checkout-ui-extensions/unstable/apis/metafields" target="_blank" class="body-link">Checkout UI extensions API</a> or the <a href="https://shopify.dev/docs/api/customer-account-ui-extensions/unstable/configuration#metafields" target="_blank" class="body-link">Customer Account UI extensions API</a>.</p>
</div> ]]></description>
    <pubDate>Fri, 07 Mar 2025 20:00:00 +0000</pubDate>
    <atom:published>2025-03-07T20:00:00.000Z</atom:published>
    <atom:updated>2025-03-07T20:00:00.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <category>Customer Accounts</category>
    <category>2025-04</category>
    <link>https://shopify.dev/changelog/support-added-for-app-owned-metafields-in-checkout-ui-extension-api</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/support-added-for-app-owned-metafields-in-checkout-ui-extension-api</guid>
  </item>
  <item>
    <title>End of Compatibility for Old POS UI Extensions Versions</title>
    <description><![CDATA[ <div class=""><p><a href="https://shopify.dev/docs/api/usage/versioning" target="_blank" class="body-link">Shopify's API version policy</a> supports stable versions for 12 months. With the release of Shopify API 2025.04, we will discontinue support for the following POS UI Extension versions:</p>
<ul>
<li>1.0.0</li>
<li>1.0.1</li>
<li>1.1.2</li>
<li>1.2.0</li>
<li>1.3.0</li>
<li>1.4.0</li>
<li>1.5.1</li>
<li>1.6.0</li>
<li>1.7.0</li>
<li>2024-04</li>
</ul>
<p>Starting with POS version 9.31, POS UI extensions built on these unsupported versions will no longer function. If your application uses any of these versions, please update to the latest POS UI Extension version to ensure continued functionality and support.</p>
</div> ]]></description>
    <pubDate>Fri, 07 Mar 2025 17:00:00 +0000</pubDate>
    <atom:published>2025-03-07T17:00:00.000Z</atom:published>
    <atom:updated>2025-03-10T00:52:20.000Z</atom:updated>
    <category>Action Required</category>
    <category>API</category>
    <category>Deprecation announcement</category>
    <category>POS Extensions</category>
    <category>2025-04</category>
    <link>https://shopify.dev/changelog/end-of-compatibility-for-old-pos-ui-extensions-versions</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/end-of-compatibility-for-old-pos-ui-extensions-versions</guid>
  </item>
  <item>
    <title>New developer documentation now available for Shopify Collective</title>
    <description><![CDATA[ <div class=""><p>As of March 6, 2025, you can access the new <a href="https://shopify.dev/docs/apps/build/collective" target="_blank" class="body-link">developer documentation</a> for Shopify Collective. This resource is designed to help developers integrate seamlessly with Shopify Collective, especially when working with external dependencies like third-party ERP and PIM solutions. The documentation provides clear guidance on using Shopify's API and webhooks to integrate your existing workflows into the Collective ecosystem.</p>
</div> ]]></description>
    <pubDate>Fri, 07 Mar 2025 17:00:00 +0000</pubDate>
    <atom:published>2025-03-07T17:00:00.000Z</atom:published>
    <atom:updated>2025-03-07T17:00:00.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <link>https://shopify.dev/changelog/shopify-collective-developer-documentation</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/shopify-collective-developer-documentation</guid>
  </item>
  <item>
    <title>POS UI Extensions: Modal update</title>
    <description><![CDATA[ <div class=""><p>In POS version 9.30, the POS UI Extensions modal will be enhanced to prevent accidental dismissals. You won't be able to dismiss the modal by swiping down or tapping outside of it. This update is designed to improve user experience and ensure that important information remains accessible. <a href="https://shopify.dev/docs/api/pos-ui-extensions/2025-01/versions" target="_blank" class="body-link">Learn more about POS UI Extensions here</a>.</p>
</div> ]]></description>
    <pubDate>Thu, 06 Mar 2025 17:00:00 +0000</pubDate>
    <atom:published>2025-03-06T17:00:00.000Z</atom:published>
    <atom:updated>2025-03-11T14:33:44.000Z</atom:updated>
    <category>API</category>
    <category>Update</category>
    <category>POS Extensions</category>
    <link>https://shopify.dev/changelog/pos-ui-extensions-modal-update</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/pos-ui-extensions-modal-update</guid>
  </item>
  <item>
    <title>[Cart AJAX API] Inventory error message updates</title>
    <description><![CDATA[ <div class=""><p>We are updating the error messages in the AJAX API for cases where a client requests more inventory than is available.</p>
<ul>
<li>If no inventory of a variant is in the cart and the client requests more than is available, the error message will be: &quot;Only <em>available quantity</em> items were added to your cart.&quot;</li>
<li>If all available inventory of a variant is already in the cart and the client requests more, the error message will be: &quot;The maximum quantity of this item is already in your cart.&quot;</li>
</ul>
<p>These changes will affect the <code>add.js</code>, <code>change.js</code>, and <code>update.js</code> endpoints.</p>
</div> ]]></description>
    <pubDate>Tue, 04 Mar 2025 17:00:00 +0000</pubDate>
    <atom:published>2025-03-04T17:00:00.000Z</atom:published>
    <atom:updated>2025-03-04T17:00:00.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <link>https://shopify.dev/changelog/cart-ajax-api-inventory-error-message-updates</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/cart-ajax-api-inventory-error-message-updates</guid>
  </item>
  <item>
    <title>Introducing the .dev Assistant VSCode Extension</title>
    <description><![CDATA[ <div class=""><p>The .dev Assistant extension for VSCode is now deprecated. The extension was a tool to integrate the .dev assistant into your IDE, but our new MCP server solves all the use cases for the extension and more. </p>
<p>For the latest features and access to Shopify’s development resources, use the <a href="https://shopify.dev/docs/apps/build/devmcp" target="_blank" class="body-link">Shopify.dev MCP</a> server with your preferred AI development tool, such as Cursor or Claude Desktop. The MCP server lets your assistant search documentation, introspect API schemas, and get up-to-date answers about Shopify APIs.</p>
</div> ]]></description>
    <pubDate>Mon, 03 Mar 2025 14:00:00 +0000</pubDate>
    <atom:published>2025-03-03T14:00:00.000Z</atom:published>
    <atom:updated>2025-07-14T23:48:11.000Z</atom:updated>
    <category>Tools</category>
    <category>New</category>
    <link>https://shopify.dev/changelog/introducing-the-dev-assistant-vscode-extension</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/introducing-the-dev-assistant-vscode-extension</guid>
  </item>
  <item>
    <title>New GraphQL APIs for Inventory Transfers Management</title>
    <description><![CDATA[ <div class=""><p>With the introduction of the new Transfers APIs and webhooks, merchants and developers can now seamlessly integrate inventory transfer data between Shopify and external systems such as Inventory Management Systems (IMS) or Enterprise Resource Planning (ERP) systems. This integration enables users to view, create, edit, delete, duplicate, and mark transfers as ready to ship. Additionally, we are launching new Shipment APIs that allow for the creation and management of multiple shipments associated with these transfers.</p>
<p>These APIs are currently available in the <code>unstable</code> API version, which is a preliminary phase for testing and feedback. They're intended to be added to the release candidate by July 2025. For more details, please refer to the <a href="https://shopify.dev/docs/api/admin-graphql/unstable/mutations/inventoryTransferCreate" target="_blank" class="body-link">Shopify API documentation</a>.</p>
</div> ]]></description>
    <pubDate>Mon, 03 Mar 2025 05:00:00 +0000</pubDate>
    <atom:published>2025-03-03T05:00:00.000Z</atom:published>
    <atom:updated>2025-03-05T18:20:31.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <category>Admin GraphQL API</category>
    <link>https://shopify.dev/changelog/new-graphql-apis-for-inventory-transfers-management</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/new-graphql-apis-for-inventory-transfers-management</guid>
  </item>
  <item>
    <title>Checkout APIs will be shut down April 1, 2025</title>
    <description><![CDATA[ <div class=""><p>Reminder: The Checkout APIs (Storefront Checkout Mutations and REST Checkout Endpoints) are deprecated and <a href="https://shopify.dev/changelog/deprecation-of-checkout-apis?utm_source=mozart&utm_medium=email&utm_campaign=checkoutapideprecation&utm_content=30daynotice" target="_blank" class="body-link">will be shut off</a> on April 1, 2025. Customers will not be able to create or complete checkouts using the deprecated Checkout APIs after the deadline. </p>
<p>To prevent disruptions, all impacted apps, including mobile apps, need to <a href="https://shopify.dev/docs/storefronts/headless/building-with-the-storefront-api/cart/migrate-to-cart-api" target="_blank" class="body-link">update to the Storefront Cart API</a> before April 1, 2025. In addition to the Storefront Cart API, mobile apps can also adopt <a href="https://shopify.dev/docs/storefronts/headless/mobile-apps/checkout-sheet-kit" target="_blank" class="body-link">Checkout Sheet Kit</a>.</p>
<p><em>Note: This change is unrelated to the prior move from checkout.liquid to Checkout Extensibility.</em></p>
</div> ]]></description>
    <pubDate>Sun, 02 Mar 2025 14:00:00 +0000</pubDate>
    <atom:published>2025-03-02T14:00:00.000Z</atom:published>
    <atom:updated>2025-03-02T14:00:00.000Z</atom:updated>
    <category>Action Required</category>
    <category>API</category>
    <category>Deprecation announcement</category>
    <category>Admin REST API</category>
    <category>Storefront API</category>
    <category>2025-04</category>
    <link>https://shopify.dev/changelog/checkout-apis-will-be-shut-down-april-1-2025</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/checkout-apis-will-be-shut-down-april-1-2025</guid>
  </item>
  <item>
    <title>Metafield description input field removal</title>
    <description><![CDATA[ <div class=""><p>The <code>description</code> field on metafield is being removed from the <a href="https://shopify.dev/docs/api/admin-graphql/unstable/input-objects/MetafieldInput" target="_blank" class="body-link"><code>MetafieldInput</code></a> GraphQL input object. The change will appear in <code>unstable</code> and will be included in the <code>2025-07</code> API version.</p>
<p>The <code>description</code> field is optional and isn't exposed to merchants. You can safely stop including the field in queries and mutations.</p>
<p>If you want to set or get the description of a metafield, use the <code>description</code> field on <a href="https://shopify.dev/docs/api/admin-graphql/unstable/objects/MetafieldDefinition" target="_blank" class="body-link"><code>MetafieldDefinition</code></a>.</p>
</div> ]]></description>
    <pubDate>Thu, 27 Feb 2025 17:00:00 +0000</pubDate>
    <atom:published>2025-02-27T17:00:00.000Z</atom:published>
    <atom:updated>2025-02-27T17:00:00.000Z</atom:updated>
    <category>Action Required</category>
    <category>API</category>
    <category>Breaking API Change</category>
    <category>Admin GraphQL API</category>
    <category>2025-07</category>
    <link>https://shopify.dev/changelog/metafield-description-field-removal</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/metafield-description-field-removal</guid>
  </item>
  <item>
    <title>New customer address capabilities in the Admin API</title>
    <description><![CDATA[ <div class=""><p>Starting with API version 2025-04, we've enhanced the Admin API with new capabilities for managing customer addresses. You can now efficiently create, update, and delete customer addresses using the following mutations: <code>customerAddressCreate</code>, <code>customerAddressUpdate</code>, and <code>customerAddressDelete</code>. Both create and update mutations allow the address to be the default address for the customer with the <code>setAsDefault</code> argument set to true. See more in the docs:</p>
<ul>
<li><a href="https://shopify.dev/docs/api/admin-graphql/2025-04/mutations/customerAddressCreate" target="_blank" class="body-link">customerAddressCreate</a></li>
<li><a href="https://shopify.dev/docs/api/admin-graphql/2025-04/mutations/customerAddressUpdate" target="_blank" class="body-link">customerAddressUpdate</a></li>
<li><a href="https://shopify.dev/docs/api/admin-graphql/2025-04/mutations/customerAddressDelete" target="_blank" class="body-link">customerAddressDelete</a></li>
</ul>
</div> ]]></description>
    <pubDate>Wed, 26 Feb 2025 17:00:00 +0000</pubDate>
    <atom:published>2025-02-26T17:00:00.000Z</atom:published>
    <atom:updated>2025-02-26T18:36:51.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <category>Admin GraphQL API</category>
    <category>2025-04</category>
    <link>https://shopify.dev/changelog/new-customer-address-capabilities-in-the-admin-api</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/new-customer-address-capabilities-in-the-admin-api</guid>
  </item>
  <item>
    <title>The `X-Shopify-API-Deprecated-Reason` HTTP header will return actual GraphQL deprecations if any</title>
    <description><![CDATA[ <div class=""><p>As of <code>2025-04</code>, the <code>X-Shopify-API-Deprecated-Reason</code> HTTP header will return the list of detected deprecations instead of a generic URL.</p>
<p><strong>Example</strong></p>
<p>As of <code>2025-04</code>:    <code>X-Shopify-API-Deprecated-Reason: Shop.products, Shop.productVariants</code>
Before <code>2025-04</code>: <code>X-Shopify-API-Deprecated-Reason: https://shopify.dev/api/usage/versioning#deprecation-practices</code></p>
</div> ]]></description>
    <pubDate>Mon, 24 Feb 2025 17:00:00 +0000</pubDate>
    <atom:published>2025-02-24T17:00:00.000Z</atom:published>
    <atom:updated>2025-02-24T17:00:00.000Z</atom:updated>
    <category>API</category>
    <category>Update</category>
    <category>Admin GraphQL API</category>
    <category>2025-04</category>
    <link>https://shopify.dev/changelog/graphql-return-actual-deprecation-reasons</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/graphql-return-actual-deprecation-reasons</guid>
  </item>
  <item>
    <title>Reserved prefix protection for metafields and metaobjects</title>
    <description><![CDATA[ <div class=""><p>Starting today, <a href="https://shopify.dev/docs/apps/build/custom-data/ownership#reserved-prefixes" target="_blank" class="body-link">reserved prefixes</a> have been widened to include any phrase. You can no longer make any metafield namespace or metaobject type that includes <code>--</code> (e.g., <code>foo--</code> , <code>foo--bar</code> ). This only affects new metafield and metaobject definitions; existing definitions will continue to work as before. This change is intended to reserve the <code>--</code> format for platform defined features such as <code>shopify--{standard}</code> and <code>app--{your-app-id}</code>.</p>
</div> ]]></description>
    <pubDate>Wed, 19 Feb 2025 17:00:00 +0000</pubDate>
    <atom:published>2025-02-19T17:00:00.000Z</atom:published>
    <atom:updated>2025-02-19T17:00:00.000Z</atom:updated>
    <category>API</category>
    <category>Update</category>
    <category>Admin GraphQL API</category>
    <category>Admin REST API</category>
    <category>Customer Account API</category>
    <category>2025-04</category>
    <link>https://shopify.dev/changelog/reserved-prefix-protection-for-metafields-and-metaobjects</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/reserved-prefix-protection-for-metafields-and-metaobjects</guid>
  </item>
  <item>
    <title>No-op for unchanged metafields and metaobjects</title>
    <description><![CDATA[ <div class=""><p>Starting today, when updating metafields and metaobjects, we'll skip triggering webhooks and related actions if the new value matches the existing one. This optimization eliminates unnecessary processing and improves system performance. The change is rolling out iteratively across metafield and metaobject operations.</p>
</div> ]]></description>
    <pubDate>Tue, 18 Feb 2025 23:00:00 +0000</pubDate>
    <atom:published>2025-02-18T23:00:00.000Z</atom:published>
    <atom:updated>2025-02-18T23:00:00.000Z</atom:updated>
    <category>API</category>
    <category>Update</category>
    <category>Admin GraphQL API</category>
    <category>Admin REST API</category>
    <category>Events &amp; webhooks</category>
    <link>https://shopify.dev/changelog/no-op-for-unchanged-metafields-and-metaobjects</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/no-op-for-unchanged-metafields-and-metaobjects</guid>
  </item>
  <item>
    <title>Hydrogen February 2025 release</title>
    <description><![CDATA[ <div class=""><p>The February 2025 Hydrogen release contains several upgrades:</p>
<ul>
<li>Turn on Remix future flag <code>v3_singleFetch</code> (<a href="https://github.com/Shopify/hydrogen/pull/2708" target="_blank" class="body-link">#2708</a>)</li>
<li>Bump Remix package dependency to 2.15.3 (<a href="https://github.com/Shopify/hydrogen/pull/2740" target="_blank" class="body-link">#2740</a>)</li>
<li>Decoupled dependency on eslint (<a href="https://github.com/Shopify/hydrogen/pull/2716" target="_blank" class="body-link">#2716</a>)</li>
<li>B2B methods and props are now stable  (<a href="https://github.com/Shopify/hydrogen/pull/2736" target="_blank" class="body-link">#2736</a>)</li>
<li>Pass i18n context automatically to customer account login (<a href="https://github.com/Shopify/hydrogen/pull/2746" target="_blank" class="body-link">#2746</a>)</li>
<li>Update getProductOptions to handle combined listing products with divergent options (<a href="https://github.com/Shopify/hydrogen/pull/2747" target="_blank" class="body-link">#2747</a>)</li>
</ul>
<p>Check out our full <a href="https://hydrogen.shopify.dev/update/january-2025" target="_blank" class="body-link">Hydrogen February 2025 release blog post</a> for more details. And please drop your comments, feedback, and suggestions in <a href="https://github.com/Shopify/hydrogen/discussions" target="_blank" class="body-link">GitHub Discussions</a>!</p>
</div> ]]></description>
    <pubDate>Tue, 18 Feb 2025 17:00:00 +0000</pubDate>
    <atom:published>2025-02-18T17:00:00.000Z</atom:published>
    <atom:updated>2025-02-18T17:00:00.000Z</atom:updated>
    <category>Platform</category>
    <category>Update</category>
    <link>https://shopify.dev/changelog/hydrogen-february-2025-release</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/hydrogen-february-2025-release</guid>
  </item>
  <item>
    <title>Explicit access grants for metafields removed</title>
    <description><![CDATA[ <div class=""><p>Completing the transition that began with the <a href="https://shopify.dev/changelog/deprecating-explicit-access-grants-for-app-owned-metafields" target="_blank" class="body-link">deprecation of explicit grants</a>, existing explicit grants in the system will stop working on February 24, 2025. </p>
</div> ]]></description>
    <pubDate>Mon, 17 Feb 2025 17:00:00 +0000</pubDate>
    <atom:published>2025-02-17T17:00:00.000Z</atom:published>
    <atom:updated>2025-02-17T17:00:00.000Z</atom:updated>
    <category>Action Required</category>
    <category>API</category>
    <category>Breaking API Change</category>
    <link>https://shopify.dev/changelog/explicit-access-grants-for-metafields-full-deprecation</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/explicit-access-grants-for-metafields-full-deprecation</guid>
  </item>
  <item>
    <title>New ends_at, created_at, and updated_at query filter parameters for searching discounts</title>
    <description><![CDATA[ <div class=""><p>As of API version 2025-04, we've added new <code>ends_at</code>, <code>created_at</code>, and <code>updated_at</code> filters to the <code>discountNodes</code> query, in order to provide greater flexibility in managing and viewing discounts using the GraphQL Admin API.</p>
<p>The  <code>ends_at</code>, <code>created_at</code>, and <code>updated_at</code> query filter parameters allow you to find discounts that will end at, were created at, or were last updated at a given time range.</p>
<p>For more information about the discountNodes query, please refer to our <a href="https://shopify.dev/docs/api/admin-graphql/2025-04/queries/discountNodes" target="_blank" class="body-link">documentation</a>.</p>
</div> ]]></description>
    <pubDate>Mon, 17 Feb 2025 17:00:00 +0000</pubDate>
    <atom:published>2025-02-17T17:00:00.000Z</atom:published>
    <atom:updated>2025-02-17T17:00:00.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <category>Admin GraphQL API</category>
    <category>2025-04</category>
    <link>https://shopify.dev/changelog/new-endsat-createdat-and-updatedat-query-filter-parameters-for-searching-discounts</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/new-endsat-createdat-and-updatedat-query-filter-parameters-for-searching-discounts</guid>
  </item>
  <item>
    <title>`NON_TEST_ORDER_LIMIT_REACHED` error code for subscriptions billing attempts</title>
    <description><![CDATA[ <div class=""><p>We added a <code>NON_TEST_ORDER_LIMIT_REACHED</code> field to the <code>SubscriptionBillingAttemptErrorCode</code> enum. This indicates that you've reached the order limit with this payment processor, and you'll need to <a href="https://help.shopify.com/en/partners/dashboard/managing-stores/test-orders-in-dev-stores" target="_blank" class="body-link">use a test payment gateway to place another order</a>.</p>
</div> ]]></description>
    <pubDate>Sat, 15 Feb 2025 17:00:00 +0000</pubDate>
    <atom:published>2025-02-15T17:00:00.000Z</atom:published>
    <atom:updated>2025-02-15T17:00:00.000Z</atom:updated>
    <category>API</category>
    <category>Update</category>
    <category>Admin GraphQL API</category>
    <category>2025-04</category>
    <link>https://shopify.dev/changelog/nontestorderlimitreached-error-for-subscriptions-billing-attempts</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/nontestorderlimitreached-error-for-subscriptions-billing-attempts</guid>
  </item>
  <item>
    <title>Updated Country Harmonized System Code validations on Product Variant mutations</title>
    <description><![CDATA[ <div class=""><p>Starting with the Admin GraphQL API version 2025-04, all Product Variant mutations will include validations to ensure that any country-specific harmonized system codes provided in the input are compatible with the existing codes on the Inventory Item. These country-specific codes must be prefixed with the item's global harmonized system code and must be at least six characters long. If the input country HS codes do not meet these criteria, a user error will be returned, specifying the invalid input index and providing an error message.</p>
<p>The following Admin GraphQL API Product Variant mutations will incorporate these validations starting from API version 2025-04:</p>
<ul>
<li>ProductVariantsBulkCreate</li>
<li>ProductVariantsBulkUpdate</li>
<li>ProductVariantCreate</li>
<li>ProductVariantUpdate</li>
<li>ProductSet</li>
</ul>
</div> ]]></description>
    <pubDate>Fri, 14 Feb 2025 17:00:00 +0000</pubDate>
    <atom:published>2025-02-14T17:00:00.000Z</atom:published>
    <atom:updated>2025-02-14T17:00:00.000Z</atom:updated>
    <category>API</category>
    <category>Breaking API Change</category>
    <category>Admin GraphQL API</category>
    <category>2025-04</category>
    <link>https://shopify.dev/changelog/updated-country-harmonized-system-code-validations-on-product-variant-mutations</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/updated-country-harmonized-system-code-validations-on-product-variant-mutations</guid>
  </item>
  <item>
    <title>Liquid arrays now support the `find`, `find_index`, `has`, and `reject` filters</title>
    <description><![CDATA[ <div class=""><p>We’ve introduced the following new filters to improve how you handle arrays in your Liquid templates. Now, you can quickly retrieve or check for items in an array without writing verbose loops or complex conditional logic.</p>
<ul>
<li><strong><code>find</code></strong>: Returns the first item that matches your condition</li>
<li><strong><code>find_index</code></strong>: Returns the index of the item that matches your condition</li>
<li><strong><code>has</code></strong>: Returns <code>true</code> when the array includes an item that matches your condition</li>
<li><strong><code>reject</code></strong>: Returns an array without items matching your condition</li>
</ul>
<p>These filters make your Liquid code more concise and declarative.</p>
<p>To learn more, check out the <a href="https://shopify.dev/docs/api/liquid/filters/array-filters" target="_blank" class="body-link">Liquid arrays API docs</a>. Happy coding!</p>
</div> ]]></description>
    <pubDate>Tue, 11 Feb 2025 21:00:00 +0000</pubDate>
    <atom:published>2025-02-11T21:00:00.000Z</atom:published>
    <atom:updated>2025-02-11T21:00:00.000Z</atom:updated>
    <category>Themes</category>
    <category>New</category>
    <link>https://shopify.dev/changelog/liquid-arrays-now-support-the-find-findindex-has-and-reject-filters</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/liquid-arrays-now-support-the-find-findindex-has-and-reject-filters</guid>
  </item>
  <item>
    <title>Flow: Template extensions no longer block deploys</title>
    <description><![CDATA[ <div class=""><p>Going forward, when you use <code>app deploy</code> to push updated or new Flow template extensions, your app will be deployed immediately. After deployment, Flow will review the template extension. If it is approved, the template will appear in Flow's template library. If it is not approved, you will receive an email detailing the necessary changes. Once you have made these changes, you can redeploy your app.</p>
</div> ]]></description>
    <pubDate>Fri, 07 Feb 2025 17:00:00 +0000</pubDate>
    <atom:published>2025-02-07T17:00:00.000Z</atom:published>
    <atom:updated>2025-02-07T20:58:53.000Z</atom:updated>
    <category>Platform</category>
    <category>Update</category>
    <link>https://shopify.dev/changelog/flow-template-extensions-no-longer-block-deploys</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/flow-template-extensions-no-longer-block-deploys</guid>
  </item>
  <item>
    <title>Discounts reference docs improvements</title>
    <description><![CDATA[ <div class=""><p>We’ve rewritten our most-visited and least-loved docs in the <strong>Discounts and marketing</strong> section of the <a href="https://shopify.dev/docs/api/admin-graphql" target="_blank" class="body-link">GraphQL Admin API reference</a>. You've shared many helpful comments and questions through our <strong>Was this page helpful?</strong> form, and we’ve reviewed and addressed 100% of them.</p>
<p>Here’s the lowdown on the latest updates.</p>
<h2>Better descriptions</h2>
<p>Many of our descriptions were too brief, circular (restated the method name), expected too much Shopify knowledge, or didn’t link to other relevant docs. </p>
<p>We’ve thoroughly revamped descriptions for Discounts objects, queries (including query filters), mutations, and input objects to include all the details you need without any guesswork. We also added more links to relevant tutorials to make it easier to find your way around and speed up your coding process.</p>
<p><img src="https://cdn.shopify.com/s/files/1/0262/2383/7206/files/discountCodeApp-descs.png?v=1738628466" alt="Improved descriptions for discountCodeApp object"></p>
<h2>Better examples</h2>
<p>We know how helpful it is to see code in action! That’s why we’ve added more real-world examples for common use cases. We added examples across top Discounts pages, especially for pages with 0 examples going in.</p>
<p><img src="https://cdn.shopify.com/s/files/1/0262/2383/7206/files/automaticDiscountNode-examples.png?v=1738628608" alt="Improved examples for automaticDiscountNode query"></p>
<h2>Thanks for your feedback!</h2>
<p>These updates are all about making your life easier. Less time scratching your head or making guesses means more time building amazing things!</p>
<p>We'd love to know what you think—where have these updates helped, and where else in the Admin API docs would you like to see improvements? You can leave comments by clicking the <strong>Was this page helpful?</strong> button on Shopify.dev. </p>
</div> ]]></description>
    <pubDate>Fri, 07 Feb 2025 17:00:00 +0000</pubDate>
    <atom:published>2025-02-07T17:00:00.000Z</atom:published>
    <atom:updated>2025-02-07T17:37:41.000Z</atom:updated>
    <category>API</category>
    <category>Update</category>
    <category>Admin GraphQL API</category>
    <link>https://shopify.dev/changelog/discounts-reference-docs-improvements</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/discounts-reference-docs-improvements</guid>
  </item>
  <item>
    <title>New `event` and `origin` fields for store credit transactions</title>
    <description><![CDATA[ <div class=""><p>As of <code>2025-04</code>, the <code>event</code> and <code>origin</code> fields have been added to store credit transactions for the Customer Account GraphQL API.</p>
<p><code>event</code>: Track what triggered a store credit transaction through the <code>StoreCreditSystemEvent</code> enum, which includes:</p>
<ul>
<li>Order payments and refunds</li>
<li>Order cancellations</li>
<li>Payment failures and returns</li>
<li>Tax finalization adjustments</li>
<li>Manual adjustments</li>
</ul>
<p><code>origin</code>: Identify the source of the transaction, with the ability to reference back to the originating <code>OrderTransaction</code> when applicable.</p>
<p>Additionally, we've made the <code>order</code> field accessible on <code>OrderTransaction</code> objects, allowing you to easily navigate from a transaction to its associated order.</p>
<p>For detailed documentation on using these new fields, visit <a href="https://shopify.dev/docs/api/customer/2025-01/interfaces/StoreCreditAccountTransaction" target="_blank" class="body-link">Shopify.dev</a>.</p>
</div> ]]></description>
    <pubDate>Fri, 07 Feb 2025 17:00:00 +0000</pubDate>
    <atom:published>2025-02-07T17:00:00.000Z</atom:published>
    <atom:updated>2025-02-07T17:00:00.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <category>Customer Account API</category>
    <category>2025-04</category>
    <link>https://shopify.dev/changelog/new-event-and-origin-fields-for-store-credit-transactions</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/new-event-and-origin-fields-for-store-credit-transactions</guid>
  </item>
  <item>
    <title>Attribute Marketing Consent to Retail Locations</title>
    <description><![CDATA[ <div class=""><p>You can now attribute customer marketing consent to a specific source location. This enhancement allows you to track marketing opt-in rates by retail location and provides better visibility into how customer marketing opt-ins are captured. The <code>CustomerEmailMarketingConsentState</code> and <code>CustomerSmsMarketingConsentState</code> GraphQL APIs can now return the retail location where the marketing consent state was last updated, when applicable.</p>
<p>New fields:</p>
<ul>
<li><code>CustomerEmailMarketingConsentState.sourceLocation</code></li>
<li><code>CustomerSmsMarketingConsentState.sourceLocation</code></li>
</ul>
<p>For more information on using the GraphQL Admin API to query customer data, please refer to the <a href="https://shopify.dev/docs/api/admin-graphql/2025-04/objects/Customer" target="_blank" class="body-link">API documentation</a>.</p>
</div> ]]></description>
    <pubDate>Wed, 05 Feb 2025 14:00:00 +0000</pubDate>
    <atom:published>2025-02-05T14:00:00.000Z</atom:published>
    <atom:updated>2025-02-05T14:00:00.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <category>Admin GraphQL API</category>
    <category>2025-04</category>
    <link>https://shopify.dev/changelog/track-the-retail-locations-where-your-customers-update-their-marketing-consent</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/track-the-retail-locations-where-your-customers-update-their-marketing-consent</guid>
  </item>
  <item>
    <title>Removing unnecessary `RELEVANCE` sort options</title>
    <description><![CDATA[ <div class=""><p><code>RELEVANCE</code> will no longer be included in connection sort options by default as of <code>2025-04</code> API versions. This will eliminate cases where the option offered no unique behavior, and acted as a basic <code>ID</code> sort. Legitimate cases where this option provides unique capabilities and services regular traffic will not change.</p>
</div> ]]></description>
    <pubDate>Sat, 01 Feb 2025 17:00:00 +0000</pubDate>
    <atom:published>2025-02-01T17:00:00.000Z</atom:published>
    <atom:updated>2025-02-01T17:00:00.000Z</atom:updated>
    <category>API</category>
    <category>Breaking API Change</category>
    <category>Admin GraphQL API</category>
    <category>Customer Account API</category>
    <category>2025-04</category>
    <link>https://shopify.dev/changelog/removing-unnecessary-relevance-sort-options</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/removing-unnecessary-relevance-sort-options</guid>
  </item>
  <item>
    <title>Hydrogen January 2025 release</title>
    <description><![CDATA[ <div class=""><p>The January 2025 Hydrogen release contains several upgrades:</p>
<ul>
<li>Turn on Remix future flag <code>v3_lazyRouteDiscovery</code> (<a href="https://github.com/Shopify/hydrogen/pull/2702" target="_blank" class="body-link">#2702</a>)</li>
<li>Update SFAPI to 2025-01 (<a href="https://github.com/Shopify/hydrogen/pull/2715" target="_blank" class="body-link">#2715</a>)</li>
<li>Workaround for “Error: failed to execute ‘insertBefore’ on ‘Node’” that sometimes happen during development (<a href="https://github.com/Shopify/hydrogen/pull/2701" target="_blank" class="body-link">#2701</a>)</li>
<li>Bump vite, Remix package versions and bump tailwind v4 alpha to beta (<a href="https://github.com/Shopify/hydrogen/pull/2696" target="_blank" class="body-link">#2696</a>)</li>
<li>Fix <code>getProductOptions</code> crashing when one of the variant returns a null <code>firstSelectableVariant</code> (<a href="https://github.com/Shopify/hydrogen/pull/2704" target="_blank" class="body-link">#2704</a>)</li>
<li>Fix <code>decodeEncodedVariant</code> when option value encoding does not end with a control character (<a href="https://github.com/Shopify/hydrogen/pull/2721" target="_blank" class="body-link">#2721</a>)</li>
<li>Remove deprecated prop <code>customerAccountUrl</code> from <code>createCustomerAccountClient</code> (<a href="https://github.com/Shopify/hydrogen/pull/2730" target="_blank" class="body-link">#2730</a>)</li>
</ul>
<p>Check out our full <a href="https://hydrogen.shopify.dev/update/january-2025" target="_blank" class="body-link">Hydrogen January 2025 release blog post</a> for more details. And please drop your comments, feedback, and suggestions in <a href="https://github.com/Shopify/hydrogen/discussions" target="_blank" class="body-link">GitHub Discussions</a>!</p>
</div> ]]></description>
    <pubDate>Fri, 31 Jan 2025 17:20:00 +0000</pubDate>
    <atom:published>2025-01-31T17:20:00.000Z</atom:published>
    <atom:updated>2025-01-31T17:20:00.000Z</atom:updated>
    <category>Platform</category>
    <category>Update</category>
    <link>https://shopify.dev/changelog/hydrogen-january-2025-release</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/hydrogen-january-2025-release</guid>
  </item>
  <item>
    <title>Record partial payments on Orders</title>
    <description><![CDATA[ <div class=""><p>As of <code>2025-04</code> partial payments can be recorded on orders using the new <a href="https://shopify.dev/docs/api/admin-graphql/2025-04/mutations/orderCreateManualPayment" target="_blank" class="body-link">orderCreateManualPayment</a> mutation. This allows the recording of multiple separate payments, up to the total amount owing on the order.</p>
</div> ]]></description>
    <pubDate>Fri, 31 Jan 2025 17:00:00 +0000</pubDate>
    <atom:published>2025-01-31T17:00:00.000Z</atom:published>
    <atom:updated>2025-01-31T17:00:00.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <category>Admin GraphQL API</category>
    <category>2025-04</category>
    <link>https://shopify.dev/changelog/record-partial-payments-on-orders</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/record-partial-payments-on-orders</guid>
  </item>
  <item>
    <title>New Catalog APIs</title>
    <description><![CDATA[ <div class=""><p>As of April 2025, the Catalog APIs have been updated to support changes in how markets are managed. For more details, see the <a href="https://shopify.dev/changelog/new-markets-apis" target="_blank" class="body-link">New Markets APIs</a>.</p>
<!-- This document will evolve as we add non-breaking changes to the target release candidate version -->

<p>With these updates, multiple markets can now be assigned to a single catalog. Consequently, the <a href="https://shopify.dev/docs/api/admin-graphql/2025-04/objects/MarketCatalog#connection-markets" target="_blank" class="body-link"><code>MarketCatalog.markets</code></a> connection will no longer guarantee the return of a single entry.</p>
<p>Additionally, the <code>Market</code> object now supports new conditions. Previously, only <code>RegionConditions</code> were available for a market; now, <code>CompanyLocationConditions</code> are also supported. To maintain the existing behavior and access only <code>Regions</code>, you must update the <code>markets</code> connection by using the <code>type: REGION</code> argument.</p>
<p>Example: </p>
<pre><code class="language-graphql">markets(first: 10, type: REGION) {
    nodes {
      id
    }
  }
}
</code></pre>
</div> ]]></description>
    <pubDate>Wed, 29 Jan 2025 17:00:00 +0000</pubDate>
    <atom:published>2025-01-29T17:00:00.000Z</atom:published>
    <atom:updated>2025-08-20T13:57:47.000Z</atom:updated>
    <category>Action Required</category>
    <category>API</category>
    <category>Breaking API Change</category>
    <category>Admin GraphQL API</category>
    <category>2025-04</category>
    <link>https://shopify.dev/changelog/new-catalog-apis</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/new-catalog-apis</guid>
  </item>
  <item>
    <title>Payout statuses In Transit and Scheduled have been merged</title>
    <description><![CDATA[ <div class=""><h1>Deprecation Announcement: Payout Status Changes</h1>
<p>We’ve made a significant update to the payout statuses in our system. As part of our ongoing efforts to streamline and enhance your experience, we have merged the payout statuses &quot;In Transit&quot; and &quot;Scheduled&quot; into a single status: <strong>Scheduled</strong>.</p>
<h2>Key Changes</h2>
<ul>
<li><strong>Merged Payout Statuses:</strong> The previous statuses of &quot;In Transit&quot; and &quot;Scheduled&quot; will now be represented simply as <strong>Scheduled</strong>.</li>
</ul>
<h2>What You Need to Do</h2>
<ul>
<li>If you have been utilizing the &quot;In Transit&quot; status in your workflows or integrations, please update your systems to just recognize the <strong>Scheduled</strong> status moving forward. This change will ensure that you continue to receive accurate information regarding your payouts.</li>
</ul>
<h2>Why This Change?</h2>
<p>We made this decision to simplify the payout tracking process, improve clarity, and enhance your overall experience with our services.</p>
<h2>Deprecation Date</h2>
<p>This change is effective immediately, and the statuses will be adjusted in your dashboards and API responses.</p>
<p>For more detailed information on this change, please refer to our <a href="https://shopify.dev/docs/api/admin-graphql/2025-01/enums/ShopifyPaymentsPayoutStatus" target="_blank" class="body-link">documentation</a>.</p>
<p>We appreciate your understanding and support as we continually work to improve our services for you.</p>
</div> ]]></description>
    <pubDate>Wed, 29 Jan 2025 17:00:00 +0000</pubDate>
    <atom:published>2025-01-29T17:00:00.000Z</atom:published>
    <atom:updated>2025-01-30T16:31:29.000Z</atom:updated>
    <category>API</category>
    <category>Deprecation announcement</category>
    <category>Admin GraphQL API</category>
    <category>2025-04</category>
    <link>https://shopify.dev/changelog/payout-statuses-in-transit-and-scheduled-have-been-merged</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/payout-statuses-in-transit-and-scheduled-have-been-merged</guid>
  </item>
  <item>
    <title>shop.metaobjects is now just metaobjects in liquid</title>
    <description><![CDATA[ <div class=""><p>We've simplified access to metaobjects in Liquid. You can now access metaobjects using the streamlined syntax <code>metaobjects.type.handle</code>, aligning with conventions used for other resource types. This new approach is more standardized and is now the preferred method. The previous access syntax, <code>shop.metaobjects.type.handle</code>, remains functional and backward compatible but is officially deprecated.</p>
<p><a href="https://shopify.dev/docs/api/liquid/objects/metaobject" target="_blank" class="body-link">Learn more</a> about metaobjects in liquid</p>
</div> ]]></description>
    <pubDate>Tue, 28 Jan 2025 17:00:00 +0000</pubDate>
    <atom:published>2025-01-28T17:00:00.000Z</atom:published>
    <atom:updated>2025-01-28T17:00:00.000Z</atom:updated>
    <category>API</category>
    <category>Update</category>
    <category>Liquid</category>
    <link>https://shopify.dev/changelog/shopmetaobjects-is-now-just-metaobjects-in-liquid</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/shopmetaobjects-is-now-just-metaobjects-in-liquid</guid>
  </item>
  <item>
    <title>New creation, update, and status filters for subscriptionContracts</title>
    <description><![CDATA[ <div class=""><p>As of API version 2025-04, you can now sort the subscriptionContracts query results by <code>created_at</code>, <code>updated_at</code>, and <code>status</code> filters in both the admin and customer account APIs. The ability to sort subscription contracts simplifies tracking and prioritizing by allowing you to quickly organize and view information based on when they were created, updated, or their current status.</p>
<p>For more information, please refer to our documentation: </p>
<ul>
<li>Learn how to <a href="https://shopify.dev/docs/api/admin-graphql/2025-04/queries/subscriptionContracts#argument-query" target="_blank" class="body-link">implement sorting</a> in the admin API.</li>
<li>Explore <a href="https://shopify.dev/docs/api/customer/2025-04/objects/Customer#connection-subscriptioncontracts" target="_blank" class="body-link">sorting filters</a> in the customer account API.</li>
</ul>
</div> ]]></description>
    <pubDate>Sat, 25 Jan 2025 17:00:00 +0000</pubDate>
    <atom:published>2025-01-25T17:00:00.000Z</atom:published>
    <atom:updated>2025-02-05T18:49:34.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <category>Admin GraphQL API</category>
    <category>Customer Account API</category>
    <category>2025-04</category>
    <link>https://shopify.dev/changelog/subscription-contracts-filters</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/subscription-contracts-filters</guid>
  </item>
  <item>
    <title>Apps will be reviewed for necessary scopes</title>
    <description><![CDATA[ <div class=""><p>Starting February 1, 2025, all apps submitted to the Shopify App Store will be checked for scopes that require Shopify permission for approved use cases. </p>
<p>Apps that have unnecessary scopes, or are using scopes for non-approved use cases will have these scopes removed. </p>
<p>To learn more about these scopes, please visit the <code>API access</code> page in your Partner Dashboard.</p>
</div> ]]></description>
    <pubDate>Fri, 24 Jan 2025 21:00:00 +0000</pubDate>
    <atom:published>2025-01-24T21:00:00.000Z</atom:published>
    <atom:updated>2025-01-24T22:01:08.000Z</atom:updated>
    <category>App store</category>
    <category>New</category>
    <link>https://shopify.dev/changelog/apps-will-be-reviewed-for-necessary-scopes</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/apps-will-be-reviewed-for-necessary-scopes</guid>
  </item>
  <item>
    <title>Optional `role` argument for `themeCreate` mutation</title>
    <description><![CDATA[ <div class=""><p>We've added an optional <a href="/docs/api/admin-graphql/2025-04/mutations/themeCreate#argument-role" target="_blank" class="body-link"><code>role</code> argument</a> on the <code>themeCreate</code> mutation, which allows clients to specify a role for the newly created theme. Only <code>UNPUBLISHED</code> and <code>DEVELOPMENT</code> roles are permitted for newly created themes.</p>
</div> ]]></description>
    <pubDate>Thu, 23 Jan 2025 17:00:00 +0000</pubDate>
    <atom:published>2025-01-23T17:00:00.000Z</atom:published>
    <atom:updated>2025-02-07T21:45:55.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <category>Admin GraphQL API</category>
    <category>2025-04</category>
    <link>https://shopify.dev/changelog/optional-role-argument-for-theme-create-mutation</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/optional-role-argument-for-theme-create-mutation</guid>
  </item>
  <item>
    <title>InventoryItem Queryable and Updatable with Products Scopes</title>
    <description><![CDATA[ <div class=""><p>The scopes for the <a href="https://shopify.dev/docs/api/admin-graphql/2025-01/input-objects/InventoryItemInput" target="_blank" class="body-link">InventoryItemInput</a> input object and the <a href="https://shopify.dev/docs/api/admin-graphql/2025-01/objects/InventoryItem" target="_blank" class="body-link">InventoryItem</a> object have been relaxed. These objects can now be updated and queried using the <code>write_products</code> and <code>read_products</code> scopes, respectively.</p>
<p>Specifically, the following changes have been made:</p>
<ul>
<li>The <code>InventoryItemInput</code> can now be set within <code>product*</code> mutations using only the <code>write_products</code> scope.</li>
<li>The <code>InventoryItem</code> can be queried with either the <code>read_products</code> or <code>read_inventory</code> scope.</li>
</ul>
<p>However, the following restrictions still apply:</p>
<ul>
<li>The <code>inventoryLevel</code> cannot be queried from the <code>InventoryItem</code> object without the <code>read_inventory</code> scope.</li>
<li>The <code>location</code> cannot be queried without the <code>read_locations</code> scope.</li>
</ul>
<p>These changes are applicable across all API versions.</p>
</div> ]]></description>
    <pubDate>Wed, 22 Jan 2025 17:00:00 +0000</pubDate>
    <atom:published>2025-01-22T17:00:00.000Z</atom:published>
    <atom:updated>2025-01-22T17:00:00.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <category>Admin GraphQL API</category>
    <link>https://shopify.dev/changelog/inventoryitem-queryable-and-updatable-with-products-scopes</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/inventoryitem-queryable-and-updatable-with-products-scopes</guid>
  </item>
  <item>
    <title>Support added for $app in product queries by metafield</title>
    <description><![CDATA[ <div class=""><p>We now support querying products by app-owned metafields with a saved namespace using the <code>$app</code> syntax. To include an app-owned metafield in your query, you can use the syntax <code>metafields.$app.key:\&quot;value\&quot;</code> or <code>metafields.$app\\:optional-additional-text.key:\&quot;value\&quot;</code>.</p>
<p><a href="https://shopify.dev/docs/api/usage/search-syntax#special-characters" target="_blank" class="body-link">As documented</a>, special characters need to be escaped from queries. For this reason, you need a <code>\\</code> when specifying <code>:</code>. For example, suppose you have an app-owned metafield with the optional-additional-text <code>swatch-app</code> and key <code>color</code> with a value of <code>green</code>. To query for products with this metafield, you would use the following search syntax:
<code>&quot;metafields.$app\\:swatch-app.color:\&quot;green\&quot;&quot;</code></p>
<p>Learn more about <a href="https://shopify.dev/docs/apps/build/custom-data/metafields/query-by-metafield-value" target="_blank" class="body-link">querying products by metafield value</a> and <a href="https://shopify.dev/docs/apps/build/custom-data/ownership#create-metafield-definitions-with-reserved-namespaces" target="_blank" class="body-link">creating metafields with reserved namespaces</a>. </p>
</div> ]]></description>
    <pubDate>Wed, 22 Jan 2025 17:00:00 +0000</pubDate>
    <atom:published>2025-01-22T17:00:00.000Z</atom:published>
    <atom:updated>2025-01-22T17:00:00.000Z</atom:updated>
    <category>API</category>
    <category>Update</category>
    <category>Admin GraphQL API</category>
    <link>https://shopify.dev/changelog/support-added-for-app-namespaces-in-product-queries-by-metafield</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/support-added-for-app-namespaces-in-product-queries-by-metafield</guid>
  </item>
  <item>
    <title>Continuous cart authentication</title>
    <description><![CDATA[ <div class=""><p>We’ve recently rolled out a change that enables continuous authentication when a customerAccessToken is appended to the cart in the buyerIdentity object. The obtained checkoutUrl allows authenticated customers to navigate to a logged-in checkout experience. Note that for security reasons, the checkoutUrl should be requested when the customer is ready to navigate to checkout, which can be re-requested if needed.</p>
<p>To log in customers automatically at checkout, please <a href="https://shopify.dev/docs/storefronts/headless/building-with-the-storefront-api/cart/manage#step-6-authenticate-customer-for-logged-in-checkouts" target="_blank" class="body-link">append the customerAccessToken</a> into the Buyer Identity object of the Storefront API Cart and <a href="https://shopify.dev/docs/api/usage/authentication#making-server-side-requests" target="_blank" class="body-link">include the buyer IP address</a> when making server side requests.</p>
<p>For developers building mobile apps with the Checkout Sheet Kit, see this <a href="https://shopify.dev/docs/storefronts/headless/mobile-apps/checkout-sheet-kit/authenticate-checkouts" target="_blank" class="body-link">detailed guide</a> to create authenticated checkout experiences for buyers within mobile apps. Previously, opening an authenticated checkout was only possible using multipass limited to Shopify Plus plans and legacy customer accounts. Now, authenticated checkouts are possible for merchants on all plans and customer account versions.</p>
</div> ]]></description>
    <pubDate>Thu, 16 Jan 2025 23:15:00 +0000</pubDate>
    <atom:published>2025-01-16T23:15:00.000Z</atom:published>
    <atom:updated>2025-01-16T23:15:00.000Z</atom:updated>
    <category>Action Required</category>
    <category>API</category>
    <category>Update</category>
    <category>Storefront API</category>
    <link>https://shopify.dev/changelog/continuous-cart-authentication</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/continuous-cart-authentication</guid>
  </item>
  <item>
    <title>New Buyer Consent Requirement</title>
    <description><![CDATA[ <div class=""><p>As of Tuesday, February 18, 2025, all published apps must display costs and obtain explicit buyer consent before adding any optional paid items to Storefront, Cart, or Checkout. </p>
<p>These requirements are already being enforced on unpublished apps. We've updated our <a href="https://shopify.dev/docs/apps/launch/app-requirements-checklist?utm_source=mozart&utm_medium=email&utm_campaign=app_requirement&utm_content=optional_paid_items#18-checkout-ui-extension-apps" target="_blank" class="body-link">Checkout UI extension app requirements</a> and <a href="https://shopify.dev/docs/apps/launch/app-requirements-checklist?utm_source=mozart&utm_medium=email&utm_campaign=app_requirement&utm_content=optional_paid_items#1-prohibited-and-restricted-app-configurations" target="_blank" class="body-link">prohibited app types</a> to make buying experiences more trustworthy. </p>
<p>These requirements apply to both packaged Checkout UI extensions and any downloadable code provided by the app or app partner across Storefront, Cart, and Checkout.</p>
</div> ]]></description>
    <pubDate>Thu, 16 Jan 2025 08:00:00 +0000</pubDate>
    <atom:published>2025-01-16T08:00:00.000Z</atom:published>
    <atom:updated>2025-01-16T14:12:04.000Z</atom:updated>
    <category>Action Required</category>
    <category>App store</category>
    <category>New</category>
    <link>https://shopify.dev/changelog/new-buyer-consent-requirement</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/new-buyer-consent-requirement</guid>
  </item>
  <item>
    <title>Expose the id field in ProductFullSyncPayload object</title>
    <description><![CDATA[ <div class=""><p>As of version 2025-04, the return field id in product full sync payload in Admin API will be available. </p>
</div> ]]></description>
    <pubDate>Wed, 15 Jan 2025 17:00:00 +0000</pubDate>
    <atom:published>2025-01-15T17:00:00.000Z</atom:published>
    <atom:updated>2025-01-15T17:00:00.000Z</atom:updated>
    <category>API</category>
    <category>Update</category>
    <category>Admin GraphQL API</category>
    <category>2025-04</category>
    <link>https://shopify.dev/changelog/expose-the-id-field-in-productfullsyncpayload-object</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/expose-the-id-field-in-productfullsyncpayload-object</guid>
  </item>
  <item>
    <title>Line item weight input for `orderCreate` mutation</title>
    <description><![CDATA[ <div class=""><p>We have enhanced the <code>orderCreate</code> mutation by adding an optional field, <code>OrderCreateLineItemInput.weight</code>, which allows you to specify the weight of each line item using the <code>WeightInput</code> object.</p>
<p>For line items linked to a product variant:</p>
<ul>
<li>Specifying a weight will override the variant's default weight.</li>
<li>If no weight is specified, the variant's weight will be used by default.</li>
</ul>
<p>For line items not linked to a product variant, such as custom items:</p>
<ul>
<li>Specifying a weight will apply that weight to the line item.</li>
<li>If no weight is specified, the line item's weight will default to 0.</li>
</ul>
<p>This is an improved version of the <code>line_items.grams</code> field that exists in the <a href="https://shopify.dev/docs/api/admin-rest/unstable/resources/order#post-orders" target="_blank" class="body-link">REST API</a>.</p>
</div> ]]></description>
    <pubDate>Wed, 15 Jan 2025 17:00:00 +0000</pubDate>
    <atom:published>2025-01-15T17:00:00.000Z</atom:published>
    <atom:updated>2025-01-15T17:00:00.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <category>Admin GraphQL API</category>
    <category>2025-04</category>
    <link>https://shopify.dev/changelog/line-item-weight-input-for-ordercreate-mutation</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/line-item-weight-input-for-ordercreate-mutation</guid>
  </item>
  <item>
    <title>New `inventoryItem` field on ProductSetVariantInput</title>
    <description><![CDATA[ <div class=""><p>We are expanding capabilities of the GraphQL Admin API <a href="https://shopify.dev/docs/api/admin-graphql/latest/mutations/productSet" target="_blank" class="body-link"><strong>productSet</strong></a> mutation by adding  <code>inventoryItem</code> field to the <a href="https://shopify.dev/docs/api/admin-graphql/latest/input-objects/ProductVariantSetInput" target="_blank" class="body-link"><strong>ProductVariantSetInput</strong></a> type.</p>
<p>This enables <code>productSet</code> to modify <code>ProductVariant</code> fields related to its <code>inventoryItem</code>, such as unit cost and tracked status .</p>
<p>This change is applied to all API versions, starting with <code>2024-10</code>.</p>
<p>For more detailed information and examples, visit our <a href="https://shopify.dev/docs/api/admin-graphql/latest/mutations/productSet" target="_blank" class="body-link">productSet documentation</a> on Shopify.dev.</p>
</div> ]]></description>
    <pubDate>Wed, 15 Jan 2025 17:00:00 +0000</pubDate>
    <atom:published>2025-01-15T17:00:00.000Z</atom:published>
    <atom:updated>2025-01-22T01:22:12.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <category>Admin Extensions</category>
    <category>Admin GraphQL API</category>
    <link>https://shopify.dev/changelog/new-inventoryitem-field-on-productsetvariantinput</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/new-inventoryitem-field-on-productsetvariantinput</guid>
  </item>
  <item>
    <title>Performance, integration and category-specific requirements come into practice</title>
    <description><![CDATA[ <div class=""><p>To ensure that the Built for Shopify status represents the highest quality of app apps will need to meet the following performance, integration and category-specific requirements. These requirements are designed to ensure that each app that earns the Built for Shopify status excels in meeting the unique needs of the merchants it serves.</p>
<p>Built for Shopify annual review will be on January 2, 2025.</p>
<h3><strong>Performance requirements</strong></h3>
<p>Date enforced: January 2, 2025</p>
<ul>
<li><p><a href="https://shopify.dev/docs/apps/launch/built-for-shopify/requirements#make-the-admin-performance-meet-the-th-percentile-web-vitals-target" target="_blank" class="body-link">Make the admin performance meet 75th percentile Web Vitals targets</a></p>
<ul>
<li><a href="/docs/apps/build/performance/admin-installation-oauth#cumulative-layout-shift" target="_blank" class="body-link">Cumulative Layout Shift (CLS)</a>: will be re-introduced and needs to be 0.1 or less.</li>
<li><a href="/docs/apps/build/performance/admin-installation-oauth#largest-contentful-paint" target="_blank" class="body-link">Interaction to Next Paint (INP)</a>: 200 milliseconds or less.</li>
</ul>
<p>  <em>This requirement replaces the previous <a href="/docs/apps/build/performance/admin-installation-oauth#first-input-delay" target="_blank" class="body-link">First Input Delay (FID)</a> requirement.</em></p>
</li>
<li><p><a href="https://shopify.dev/docs/apps/launch/built-for-shopify/requirements#minimize-the-impact-on-checkout-speed" target="_blank" class="body-link">Minimize the impact on checkout speed</a></p>
<ul>
<li>Your app must make a minimum of 1,000 requests over the last 28 days. </li>
<li>Your requests must have a p95 value of 500ms or less, with a 0.1% failure rate.</li>
</ul>
<p>  <em>These requirements will replace the following ones:
  Your app must make a minimum of 1,000 requests over three weeks.
  Your app must have a p99 value of 1000ms or less, with 0% failure rate.</em></p>
</li>
</ul>
<h3><strong>Integration requirements</strong></h3>
<p>Date enforced: January 2, 2025</p>
<ul>
<li><p><a href="https://shopify.dev/docs/apps/launch/built-for-shopify/requirements#enable-seamless-sign-up-based-on-shopify-credentials" target="_blank" class="body-link">Enable seamless sign up based on Shopify credentials</a>
Apps should make sign up seamless for merchants, without requiring an additional login or sign-up prompt. Users should be able to begin using the app immediately after installing it without having to complete another sign up. <a href="/docs/apps/build/integrating-with-shopify#exceptions" target="_blank" class="body-link">Exceptions</a> apply on apps that can’t be easily accessed by merchants in a self-service manner and require a more complex sign-up, often involving a business-to-business contract. In these cases, the first step to the in-admin onboarding of these apps must always be a workflow that enables a merchant to link the current store with their existing credentials.  If your app offers both self-service and business-to-business sign up, then the app's onboarding must include an option to sign up for the service using the merchant's existing Shopify credentials.</p>
</li>
<li><p><a href="https://shopify.dev/docs/apps/launch/built-for-shopify/requirements#include-simplified-monitoring-or-reporting" target="_blank" class="body-link">Include simplified monitoring or reporting</a>
Expose key metrics that are helpful for merchants on the app’s home page. If your app includes monitoring or complex reports that can only exist on an external website or app surface, then you must include a simplified version of the monitoring or reporting in the Shopify admin.</p>
</li>
<li><p><a href="https://shopify.dev/docs/apps/launch/built-for-shopify/requirements#keep-third-party-connection-settings-within-shopify" target="_blank" class="body-link">Keep third-party connection settings within Shopify</a>
Any settings or configurations that control the connection between Shopify and a third-party system must be available inside the Shopify embedded app interface.</p>
</li>
</ul>
<h3><strong>Category specific requirements</strong></h3>
<p>We understand not all apps are the same. Apps are built to address a wide variety of merchant workflows and serve many diverse functions. Moving forward some categories of apps must adhere to additional requirements. These requirements specify specific APIs, integrations, and design guidelines that reflect what a great app in these categories looks like.</p>
<p><strong>Product bundles apps</strong>
Date enforced: January 2, 2025</p>
<ul>
<li><a href="https://shopify.dev/docs/apps/launch/built-for-shopify/requirements#use-bundles-primitives" target="_blank" class="body-link">Use bundles primitives</a>
Your app must either use the GraphQL Admin API to create <a href="https://shopify.dev/docs/apps/build/product-merchandising/bundles/add-fixed-bundle" target="_blank" class="body-link">static bundles</a> or use a cartTransform function to create <a href="https://shopify.dev/docs/apps/build/product-merchandising/bundles/add-customized-bundle" target="_blank" class="body-link">customized bundles</a>.
However, if your app supports a bundles use case that is not yet supported through these APIs</li>
</ul>
</div> ]]></description>
    <pubDate>Sat, 11 Jan 2025 17:00:00 +0000</pubDate>
    <atom:published>2025-01-11T17:00:00.000Z</atom:published>
    <atom:updated>2025-01-11T17:00:00.000Z</atom:updated>
    <category>Built for Shopify</category>
    <category>Update</category>
    <link>https://shopify.dev/changelog/performance-integration-and-category-specific-requirements-come-into-practice</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/performance-integration-and-category-specific-requirements-come-into-practice</guid>
  </item>
  <item>
    <title>New card brands for OrderTransactions.paymentMethods</title>
    <description><![CDATA[ <div class=""><p>The <a href="https://shopify.dev/docs/api/admin-graphql/unstable/enums/PaymentMethods" target="_blank" class="body-link"><code>OrderTransactions.paymentMethods</code></a> enumerated type now includes two new values: <code>CARTES_BANCAIRES</code> and <code>BANCONTACT</code>. Starting with API version <code>2025-04</code>, order transactions paid using these methods will reflect the new values in GraphQL API responses.</p>
</div> ]]></description>
    <pubDate>Fri, 10 Jan 2025 17:00:00 +0000</pubDate>
    <atom:published>2025-01-10T17:00:00.000Z</atom:published>
    <atom:updated>2025-01-10T17:00:00.000Z</atom:updated>
    <category>API</category>
    <category>Update</category>
    <category>Admin GraphQL API</category>
    <category>2025-04</category>
    <link>https://shopify.dev/changelog/new-card-brands-for-ordertransactionspaymentmethods</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/new-card-brands-for-ordertransactionspaymentmethods</guid>
  </item>
  <item>
    <title>Shopify Functions template and Shopify CLI changes to support Rust 1.84</title>
    <description><![CDATA[ <div class=""><p>In anticipation of the <a href="https://blog.rust-lang.org/2024/04/09/updates-to-rusts-wasi-targets.html" target="_blank" class="body-link">removal of the wasm32-wasi build target in Rust 1.84</a>, Shopify has updated its Shopify Functions templates for Rust. The <code>cargo-wasi</code> utility has been removed because it is incompatible with Rust 1.84 and later versions. </p>
<p>Additionally, starting with Shopify CLI 3.73, all function builds now include an optimization pass by default. Previously, this optimization was handled by <code>cargo-wasi</code>.</p>
<p>Before you update to Rust 1.84, we recommend reviewing and following the <a href="https://shopify.dev/docs/apps/build/functions/programming-languages/rust-for-functions#updating-to-rust-1-84-and-higher" target="_blank" class="body-link">steps outlined here</a>. These changes are compatible with Rust 1.78 and above.</p>
</div> ]]></description>
    <pubDate>Wed, 08 Jan 2025 05:00:00 +0000</pubDate>
    <atom:published>2025-01-08T05:00:00.000Z</atom:published>
    <atom:updated>2025-01-08T21:08:57.000Z</atom:updated>
    <category>Tools</category>
    <category>Update</category>
    <link>https://shopify.dev/changelog/shopify-functions-template-and-shopify-cli-changes-to-support-rust-184</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/shopify-functions-template-and-shopify-cli-changes-to-support-rust-184</guid>
  </item>
  <item>
    <title>Add tax validation with localizedFields in Checkout UI Extensions &amp; Functions</title>
    <description><![CDATA[ <div class=""><p><strong>As of Jan 6, 2025</strong>, you can use the new localizedFields in the Checkout UI Extension API and Function API to implement custom validation for tax fields in checkout. The localizationExtensions field in the Admin GraphQL API has now been renamed to localizedFields too. Additionally, you can now target tax fields in checkout for error messages.</p>
<p>Available currently in the unstable API version and will be released to the stable 2025-01 API version. Learn more on how to implement <a href="https://shopify.dev/docs/apps/build/markets/add-locally-required-order-data#validate-a-country-field" target="_blank" class="body-link">localizedFields</a>.</p>
</div> ]]></description>
    <pubDate>Mon, 06 Jan 2025 18:00:00 +0000</pubDate>
    <atom:published>2025-01-06T18:00:00.000Z</atom:published>
    <atom:updated>2025-03-31T23:26:21.000Z</atom:updated>
    <category>API</category>
    <category>Update</category>
    <category>Admin GraphQL API</category>
    <category>Functions</category>
    <link>https://shopify.dev/changelog/add-tax-validation-with-localizedfields-in-checkout-ui-extensions-functions</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/add-tax-validation-with-localizedfields-in-checkout-ui-extensions-functions</guid>
  </item>
  <item>
    <title>New validations on function input query variables metafields</title>
    <description><![CDATA[ <div class=""><p>As of 2025-01, input query variables metafields will now be subject to additional validation across all Function APIs.</p>
<p>Previously, if these metafields didn't contain properly formatted data, we treated them as empty. This could lead to situations where it was difficult to determine why a function wasn't receiving the expected input data.</p>
<p>Now, an invalid metafield will result in an <code>InvalidVariableValueError</code> when attempting to run the function.</p>
<p>For more information, refer to the <a href="https://shopify.dev/docs/apps/build/functions/monitoring-and-errors#list-of-errors" target="_blank" class="body-link">list of errors</a>.</p>
</div> ]]></description>
    <pubDate>Mon, 06 Jan 2025 18:00:00 +0000</pubDate>
    <atom:published>2025-01-06T18:00:00.000Z</atom:published>
    <atom:updated>2025-01-06T18:00:00.000Z</atom:updated>
    <category>API</category>
    <category>Update</category>
    <category>2025-01</category>
    <link>https://shopify.dev/changelog/new-validations-on-function-input-query-variables-metafields</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/new-validations-on-function-input-query-variables-metafields</guid>
  </item>
  <item>
    <title>POS UI Extensions 2025-01 Update</title>
    <description><![CDATA[ <div class=""><p>As of January 20, we added the following updates to POS UI Extensions: </p>
<h3>Breaking Changes</h3>
<ul>
<li>Removed the deprecated ActionItem component. Use a <a href="/docs/api/pos-ui-extensions/components/button" target="_blank" class="body-link">Button</a> instead.</li>
<li>Removed the deprecated SmartGridApi. Use the <a href="/docs/api/pos-ui-extensions/apis/action-api" target="_blank" class="body-link">ActionApi</a> instead.</li>
<li>Removed the deprecated DiscountType. Use <a href="/docs/api/pos-ui-extensions/apis/cart-api#cartapi-propertydetail-applycartdiscount" target="_blank" class="body-link">CartDiscountType</a> and <a href="/docs/api/pos-ui-extensions/apis/cart-api#cartapi-propertydetail-setlineitemdiscount" target="_blank" class="body-link">LineItemDiscountType</a> instead.</li>
<li>Removed the deprecated <code>badge</code> prop from the <a href="/docs/api/pos-ui-extensions/components/list" target="_blank" class="body-link">List</a> component. Use <code>badges</code> instead.</li>
<li>Removed the deprecated <code>TextFieldProps</code> type from the <a href="/docs/api/pos-ui-extensions/components/textfield" target="_blank" class="body-link">TextField</a> component.</li>
<li>Deprecated <code>'vertical'</code> and <code>'horizontal'</code> as values for the <code>direction</code> field in the <a href="/docs/api/pos-ui-extensions/components/Stack" target="_blank" class="body-link">Stack</a> component.</li>
<li>Deprecated the <code>flexChildren'</code> field in the <a href="/docs/api/pos-ui-extensions/components/Stack" target="_blank" class="body-link">Stack</a> component.</li>
<li>Deprecated the <code>flex'</code> field in the <a href="/docs/api/pos-ui-extensions/components/Stack" target="_blank" class="body-link">Stack</a> component.</li>
<li>Deprecated the <code>flexWrap'</code> field in the <a href="/docs/api/pos-ui-extensions/components/Stack" target="_blank" class="body-link">Stack</a> component.</li>
<li>Deprecated the <code>paddingHorizontal'</code> and <code>paddingVertical</code> fields in the <a href="/docs/api/pos-ui-extensions/components/Stack" target="_blank" class="body-link">Stack</a> component.</li>
<li>Removed <code>customValidator</code> prop from the <a href="/docs/api/pos-ui-extensions/components/formattedtextfield" target="_blank" class="body-link">FormattedTextField</a> component.</li>
<li>Removed <code>email</code>, <code>firstName</code>, <code>lastName</code>, and <code>note</code> from the <a href="/docs/api/pos-ui-extensions/apis/cart-api#customer" target="_blank" class="body-link">Customer</a> object.</li>
</ul>
<h3>Features</h3>
<ul>
<li>Added <a href="/docs/api/pos-ui-extensions/apis/print-api" target="_blank" class="body-link">PrintApi</a> and a <a href="/docs/api/pos-ui-extensions/components/printpreview" target="_blank" class="body-link">PrintPreview</a> component.</li>
<li>Added <code>currency</code> prop to the <a href="/docs/api/pos-ui-extensions/apis/session-api" target="_blank" class="body-link">SessionApi</a>.</li>
<li><a href="/docs/api/pos-ui-extensions/apis/cart-api" target="_blank" class="body-link">Cart API</a> updates:<ul>
<li>Added <code>bulkUpdateCart</code> function for single-operation cart updates.</li>
<li>The <code>addLineItem</code> and <code>addCustomSale</code> functions now return a UUID for the added line item.</li>
</ul>
</li>
<li>Added <a href="/docs/api/pos-ui-extensions/components/box" target="_blank" class="body-link">Box</a> component.</li>
<li>Enhanced the <a href="/docs/api/pos-ui-extensions/components/box" target="_blank" class="body-link">Stack</a> component. New fields include <code>justifyContent</code>, <code>alignItems</code>, and <code>alignContent</code>, as well as numerous new sizing and spacing options.</li>
<li>Added Sizing and fill options to the<a href="/docs/api/pos-ui-extensions/components/image" target="_blank" class="body-link">Image</a> component.</li>
</ul>
<p>All of the changes are available for POS UI extensions version 2025-01 and POS app version 9.26.0. See the <a href="https://shopify.dev/docs/api/pos-ui-extensions/unstable/versions" target="_blank" class="body-link">version log</a> for all version details.</p>
</div> ]]></description>
    <pubDate>Mon, 06 Jan 2025 17:00:00 +0000</pubDate>
    <atom:published>2025-01-06T17:00:00.000Z</atom:published>
    <atom:updated>2025-01-08T17:46:58.000Z</atom:updated>
    <category>API</category>
    <category>Update</category>
    <category>POS Extensions</category>
    <link>https://shopify.dev/changelog/pos-ui-extensions-2025-01-update</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/pos-ui-extensions-2025-01-update</guid>
  </item>
  <item>
    <title>New Markets APIs</title>
    <description><![CDATA[ <div class=""><p>As of <code>2025-04</code>, the Markets APIs have been updated to support additional customizations and conditions for each market, enabling merchants to tailor their shops' buyer experiences.</p>
<!-- This document will evolve as we add non-breaking changes to the target release candidate version  -->
<h3>Primary Market</h3>
<p>To transition away from the &quot;primary market&quot; concept, a new mutation, <a href="https://shopify.dev/docs/api/admin-graphql/2025-04/mutations/backupRegionUpdate" target="_blank" class="body-link"><code>backupRegionUpdate</code></a> allows you to set a shop-wide region to use when no better option can be determined from buyer signals. Instead of <code>MarketRegionCreateInput</code>, you must use <a href="https://shopify.dev/docs/api/admin-graphql/2025-04/input-objects/BackupRegionUpdateInput" target="_blank" class="body-link"><code>BackupRegionUpdateInput</code></a>.</p>
<ul>
<li>To query the shop's backup region, use <a href="https://shopify.dev/docs/api/admin-graphql/2025-04/queries/backupRegion" target="_blank" class="body-link"><code>backupRegion</code></a>.</li>
<li>To obtain a list of available regions that can be set as a backup, use the <a href="https://shopify.dev/docs/api/admin-graphql/2025-04/queries/availableBackupRegions" target="_blank" class="body-link"><code>availableBackupRegions</code></a> query.</li>
</ul>
<h3>Currency Settings</h3>
<p>The <a href="https://shopify.dev/docs/api/admin-graphql/2025-04/objects/Market#field-currencysettings" target="_blank" class="body-link"><code>Market.currencySettings</code></a> field is now nullable. A null value indicates that the currency settings are inherited from the parent market.</p>
<h3>Web Presence</h3>
<p>A web presence can now exist without a market and can also be assigned to multiple markets. The field <a href="https://shopify.dev/docs/api/admin-graphql/2025-04/objects/MarketWebPresence#field-market" target="_blank" class="body-link"><code>MarketWebPresence.market</code></a> is deprecated in favour of <a href="https://shopify.dev/docs/api/admin-graphql/2025-04/objects/MarketWebPresence#connection-markets" target="_blank" class="body-link"><code>MarketWebPresence.markets</code></a>, which allows for this expanded functionality.</p>
<h3>Catalogs</h3>
<p>As of <code>2025-04</code>, the Product's <a href="https://shopify.dev/docs/api/admin-graphql/2025-01/objects/Product#field-contextualpricing" target="_blank" class="body-link">contextualPricing</a> field and Product Variant's <a href="https://shopify.dev/docs/api/admin-graphql/2025-01/objects/ProductVariant#field-contextualpricing" target="_blank" class="body-link">contextualPricing</a> field will resolve prices only considering active markets. Previous versions will continue to consider draft markets in the calculation of these fields.</p>
</div> ]]></description>
    <pubDate>Fri, 03 Jan 2025 23:00:00 +0000</pubDate>
    <atom:published>2025-01-03T23:00:00.000Z</atom:published>
    <atom:updated>2025-02-07T18:03:26.000Z</atom:updated>
    <category>Action Required</category>
    <category>API</category>
    <category>Breaking API Change</category>
    <category>Admin GraphQL API</category>
    <category>2025-04</category>
    <link>https://shopify.dev/changelog/new-markets-apis</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/new-markets-apis</guid>
  </item>
  <item>
    <title>New `collection_id` filter added to `products` query filters</title>
    <description><![CDATA[ <div class=""><p>As of the <strong>2024-10</strong> version of the GraphQL Admin API, a new filter, <code>collection_id</code>, has been added to the <code>products</code> query. This filter allows you to retrieve products that belong to a specific collection. </p>
<p>When using the <code>collection_id</code> filter, it can be combined with the following filters:</p>
<ul>
<li><code>created_at</code></li>
<li><code>updated_at</code></li>
<li><code>published_at</code></li>
<li><code>gift_card</code></li>
<li><code>handle</code></li>
<li><code>combined_listing_role</code></li>
<li><code>product_type</code></li>
<li><code>status</code></li>
<li><code>title</code></li>
<li><code>vendor</code></li>
</ul>
<p>For more details on all available attributes for the <code>products</code> query, visit the <a href="https://shopify.dev/docs/api/admin-graphql/2024-10/queries/products#argument-query" target="_blank" class="body-link">Shopify developer documentation</a> on <a href="https://shopify.dev/" target="_blank" class="body-link">shopify.dev</a>.</p>
<p>Example usage of the <code>collection_id</code> filter in a query:</p>
<pre><code class="language-graphql">{
  products(query: &quot;collection_id:1234567890&quot;) {
    edges {
      node {
        id
        title
      }
    }
  }
}
</code></pre>
<p>This query retrieves products from the collection with the ID <code>1234567890</code>.</p>
</div> ]]></description>
    <pubDate>Wed, 01 Jan 2025 21:37:00 +0000</pubDate>
    <atom:published>2025-01-01T21:37:00.000Z</atom:published>
    <atom:updated>2025-01-13T18:11:50.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <category>Admin GraphQL API</category>
    <category>2024-10</category>
    <link>https://shopify.dev/changelog/new-collection_id-filter-added-to-products-query-filters</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/new-collection_id-filter-added-to-products-query-filters</guid>
  </item>
  <item>
    <title>New fields to represent product bundles in a grouped view</title>
    <description><![CDATA[ <div class=""><p>As of API <code>2025-01</code> version, we have introduced two new fields that allow you to accurately nest component products under the parent product in a grouped view. </p>
<ul>
<li><p>The new <code>components</code> field has been added to the <a href="https://shopify.dev/docs/api/admin-graphql/2025-01/objects/AbandonedCheckoutLineItem" target="_blank" class="body-link">AbandonedCheckoutLineItem</a> object in the Admin GraphQL API. Use this field to define the component products within a product bundle, ensuring a grouped view in Abandoned Checkout Emails. </p>
</li>
<li><p>The new <code>group</code> field has been added to the <a href="https://shopify.dev/docs/api/customer/2025-01/objects/LineItem" target="_blank" class="body-link">LineItem</a> object in the Customer Account API. Use this field to indicate that line item products are a part of a product bundle, ensuring a grouped view in Orders Detail Pages.</p>
</li>
</ul>
<p>In addition, these fields can help you display product bundles in a grouped view in transactional emails, such as order confirmations and shipping updates. Learn how you can implement a grouped view by following <a href="https://shopify.dev/docs/storefronts/themes/product-merchandising/bundles-emails" target="_blank" class="body-link">this tutorial</a>. </p>
</div> ]]></description>
    <pubDate>Wed, 01 Jan 2025 21:01:00 +0000</pubDate>
    <atom:published>2025-01-01T21:01:00.000Z</atom:published>
    <atom:updated>2025-01-01T21:01:00.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <category>Admin GraphQL API</category>
    <category>Customer Account API</category>
    <category>2025-01</category>
    <link>https://shopify.dev/changelog/support-bundles-grouped-view-fields-in-graphql-api</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/support-bundles-grouped-view-fields-in-graphql-api</guid>
  </item>
  <item>
    <title>Filter products by category or taxonomy metafield</title>
    <description><![CDATA[ <div class=""><p>Starting with Storefront API version 2025-01, you can now filter products within collections and search results using <code>CategoryFilter</code> and <code>TaxonomyMetafieldFilter</code>.</p>
<ul>
<li><strong><code>CategoryFilter</code></strong>: Filter products by a category ID.</li>
<li><strong><code>TaxonomyMetafieldFilter</code></strong>: Filter products based on a taxonomy metafield namespace, key, and value.</li>
</ul>
<p>Learn more about <a href="https://shopify.dev/docs/storefronts/headless/building-with-the-storefront-api/products-collections/filter-products" target="_blank" class="body-link">filtering products in collections</a> on Shopify.dev.</p>
</div> ]]></description>
    <pubDate>Wed, 01 Jan 2025 20:57:00 +0000</pubDate>
    <atom:published>2025-01-01T20:57:00.000Z</atom:published>
    <atom:updated>2025-01-01T20:57:00.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <category>Storefront API</category>
    <category>2025-01</category>
    <link>https://shopify.dev/changelog/filter-products-by-category-or-taxonomy-metafield</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/filter-products-by-category-or-taxonomy-metafield</guid>
  </item>
  <item>
    <title>Minimum requirement is now optional on automatic discounts</title>
    <description><![CDATA[ <div class=""><p>Previously merchants were required to specify minimum purchase conditions on product, order, and free shipping automatic discounts. We're now making these conditions optional, so the  <code>minimumRequirement</code> field in our APIs is now able to return a <code>null</code> value.</p>
<p>As of version 2025-01, the <code>minimumRequirement</code> field for both <a href="https://shopify.dev/docs/api/admin-graphql/2025-01/objects/DiscountAutomaticBasic#field-minimumrequirement" target="_blank" class="body-link">DiscountAutomaticBasic</a> and <a href="https://shopify.dev/docs/api/admin-graphql/2025-01/objects/DiscountAutomaticFreeShipping#field-minimumrequirement" target="_blank" class="body-link">DiscountAutomaticFreeShipping</a> will become nullable.</p>
</div> ]]></description>
    <pubDate>Wed, 01 Jan 2025 18:00:00 +0000</pubDate>
    <atom:published>2025-01-01T18:00:00.000Z</atom:published>
    <atom:updated>2025-01-01T18:00:00.000Z</atom:updated>
    <category>API</category>
    <category>Update</category>
    <category>Admin GraphQL API</category>
    <category>2025-01</category>
    <link>https://shopify.dev/changelog/minimum-requirement-is-now-optional-on-automatic-discounts</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/minimum-requirement-is-now-optional-on-automatic-discounts</guid>
  </item>
  <item>
    <title>New customer input field for the OrderCreate mutation</title>
    <description><![CDATA[ <div class=""><p>As of GraphQL Admin API 2025-01 version, we're deprecating the <code>customer_id</code> field in favor of the new <code>customer</code> field which you can use to either associate an existing customer or upsert a customer record.</p>
<p>This provides some added flexibility when creating an order by saving the caller an extra step in fetching the customer ID before initiating the order creation.</p>
<p>Learn more about <code>orderCreate</code> on <a href="https://shopify.dev/docs/api/admin-graphql/2024-10/mutations/orderCreate" target="_blank" class="body-link">Shopify.dev</a>. </p>
</div> ]]></description>
    <pubDate>Wed, 01 Jan 2025 17:00:00 +0000</pubDate>
    <atom:published>2025-01-01T17:00:00.000Z</atom:published>
    <atom:updated>2025-01-01T17:00:00.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <category>Admin GraphQL API</category>
    <category>2025-01</category>
    <link>https://shopify.dev/changelog/new-customer-input-field-for-the-ordercreate-mutation</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/new-customer-input-field-for-the-ordercreate-mutation</guid>
  </item>
  <item>
    <title>Introduce concatenatedOriginContract to subscriptionLine</title>
    <description><![CDATA[ <div class=""><p>As of 2025-01, we've introduced <code>concatenatedOriginContract</code> to <code>subscriptionLine</code> .</p>
<p>You can now query the origin contract of the lines if you have used the Subscription Billing Cycle APIs to combine multiple contracts. This can be accessed through <code>subscriptionBillingCycle.editedContract.lines.concatenatedOriginContract</code>.</p>
<p>Learn more about combining contract on <a href="https://shopify.dev/docs/apps/build/purchase-options/subscriptions/contracts/combine-subscription-contracts" target="_blank" class="body-link">Shopify.dev</a>.</p>
</div> ]]></description>
    <pubDate>Wed, 01 Jan 2025 16:53:00 +0000</pubDate>
    <atom:published>2025-01-01T16:53:00.000Z</atom:published>
    <atom:updated>2025-01-01T16:53:00.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <category>Admin GraphQL API</category>
    <category>2025-01</category>
    <link>https://shopify.dev/changelog/introduce-concatenatedorigincontract-to-subscriptionline</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/introduce-concatenatedorigincontract-to-subscriptionline</guid>
  </item>
  <item>
    <title>Unused PriceListUserErrorCode values removed</title>
    <description><![CDATA[ <div class=""><p>Starting in API version 2025-01, <a href="https://shopify.dev/docs/api/admin-graphql/unstable/enums/PriceListUserErrorCode" target="_blank" class="body-link">PriceListErrorCode</a> values that are currently not returned by the API will be hidden. These error codes include:</p>
<ul>
<li><code>CONTEXT_RULE_COUNTRIES_LIMIT</code></li>
<li><code>CONTEXT_RULE_COUNTRY_TAKEN</code></li>
<li><code>CONTEXT_RULE_LIMIT_REACHED</code></li>
<li><code>CURRENCY_COUNTRY_MISMATCH</code></li>
<li><code>COUNTRY_CURRENCY_MISMATCH</code></li>
<li><code>MARKET_CURRENCY_MISMATCH</code></li>
<li><code>CONTEXT_RULE_MARKET_NOT_FOUND</code></li>
<li><code>CONTEXT_RULE_MARKET_TAKEN</code></li>
</ul>
</div> ]]></description>
    <pubDate>Wed, 01 Jan 2025 14:00:00 +0000</pubDate>
    <atom:published>2025-01-01T14:00:00.000Z</atom:published>
    <atom:updated>2025-01-01T14:00:00.000Z</atom:updated>
    <category>Action Required</category>
    <category>API</category>
    <category>Breaking API Change</category>
    <category>Admin GraphQL API</category>
    <category>2025-01</category>
    <link>https://shopify.dev/changelog/unused-pricelistusererrorcode-values-removed</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/unused-pricelistusererrorcode-values-removed</guid>
  </item>
  <item>
    <title>Update to `percentage_adjustment` field on `SellingPlanPercentagePriceAdjustment`</title>
    <description><![CDATA[ <div class=""><p>In the Storefront API version 2025-01, there is an update to the <a href="https://shopify.dev/docs/api/storefront/2025-01/objects/SellingPlanPercentagePriceAdjustment#field-adjustmentpercentage" target="_blank" class="body-link">adjustmentPercentage</a> field on the <a href="https://shopify.dev/docs/api/storefront/2025-01/objects/SellingPlanPercentagePriceAdjustment" target="_blank" class="body-link"><code>SellingPlanPercentagePriceAdjustment</code></a> object. This field, which facilitates the percentage price adjustment for a selling plan's pricing policy, will transition from an <a href="https://shopify.dev/docs/api/storefront/2025-01/scalars/Int" target="_blank" class="body-link"><code>Int</code></a> data type to a <a href="https://shopify.dev/docs/api/storefront/2025-01/scalars/Float" target="_blank" class="body-link"><code>Float</code></a>.</p>
</div> ]]></description>
    <pubDate>Wed, 01 Jan 2025 14:00:00 +0000</pubDate>
    <atom:published>2025-01-01T14:00:00.000Z</atom:published>
    <atom:updated>2025-01-01T14:00:00.000Z</atom:updated>
    <category>API</category>
    <category>Update</category>
    <category>Storefront API</category>
    <category>2025-01</category>
    <link>https://shopify.dev/changelog/update-to-percentage_adjustment-field-on-sellingplanpercentagepriceadjustment</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/update-to-percentage_adjustment-field-on-sellingplanpercentagepriceadjustment</guid>
  </item>
  <item>
    <title>New delivery promise participants API</title>
    <description><![CDATA[ <div class=""><p>As of the 2025-01 Admin GraphQL API, you can now query for delivery promise participants, using <a href="https://shopify.dev/docs/api/admin-graphql/2025-01/queries/deliveryPromiseParticipants" target="_blank" class="body-link"><code>deliveryPromiseParticipants</code></a>.</p>
<p>You can make updates using the <a href="https://shopify.dev/docs/api/admin-graphql/2025-01/mutations/deliveryPromiseParticipantsUpdate" target="_blank" class="body-link"><code>deliveryPromiseParticipantsUpdate</code></a> mutation.</p>
<p>These APIs control the usage of delivery promises on the platform.</p>
</div> ]]></description>
    <pubDate>Wed, 01 Jan 2025 13:00:00 +0000</pubDate>
    <atom:published>2025-01-01T13:00:00.000Z</atom:published>
    <atom:updated>2025-01-01T13:00:00.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <category>Admin GraphQL API</category>
    <category>2025-01</category>
    <link>https://shopify.dev/changelog/new-delivery-promise-participants-api</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/new-delivery-promise-participants-api</guid>
  </item>
  <item>
    <title>Deprecation of `storefrontCustomerAccessTokenCreate` Mutation</title>
    <description><![CDATA[ <div class=""><p>As of API version <code>2025-01</code>, the <code>storefrontCustomerAccessTokenCreate</code> mutation is deprecated. This mutation, which was used to exchange the Customer Access Token in the <code>Authorization</code> header for a Storefront Customer Access Token, is no longer necessary. The Storefront API now directly supports Access Tokens from the Customer Accounts API via the <code>@inContext</code> <a href="https://shopify.dev/docs/api/storefront/2025-01/input-objects/BuyerInput#field-customeraccesstoken" target="_blank" class="body-link">BuyerInput#customerAccessToken</a>, and can be used for cart creation and buyer updates.</p>
<p><strong>Migration Path:</strong></p>
<ol>
<li>Obtain an access token using the OAuth2 specification. Detailed steps are available <a href="https://shopify.dev/docs/api/customer#step-obtain-access-token" target="_blank" class="body-link">here</a>. These steps are identical to those for obtaining an access token for the Customer Accounts API.</li>
<li>Use this access token directly with the Storefront API, replacing the deprecated <code>storefrontCustomerAccessTokenCreate</code> mutation.</li>
</ol>
<p>This access token identifies your customer, enabling personalized features within the Storefront API.</p>
<p>For more information on the Customer Accounts API, visit <a href="https://shopify.dev/docs/api/customer" target="_blank" class="body-link">Shopify.dev</a>.</p>
</div> ]]></description>
    <pubDate>Wed, 01 Jan 2025 13:00:00 +0000</pubDate>
    <atom:published>2025-01-01T13:00:00.000Z</atom:published>
    <atom:updated>2025-01-01T13:00:00.000Z</atom:updated>
    <category>API</category>
    <category>Deprecation announcement</category>
    <category>Customer Account API</category>
    <category>2025-01</category>
    <link>https://shopify.dev/changelog/deprecation-of-storefrontcustomeraccesstokencreate-mutation</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/deprecation-of-storefrontcustomeraccesstokencreate-mutation</guid>
  </item>
  <item>
    <title>Update in orders webhook to view bundles and their components</title>
    <description><![CDATA[ <div class=""><p>Starting with the Admin API version 2025-01, we have added the <code>sales_line_item_group_id</code> field to the orders webhook. This field allows you to determine if a specific <code>line_item</code> is part of a bundle. When a <code>line_item</code> belongs to a bundle, it will have an associated <code>sales_line_item_group_id</code>.</p>
</div> ]]></description>
    <pubDate>Wed, 01 Jan 2025 12:00:00 +0000</pubDate>
    <atom:published>2025-01-01T12:00:00.000Z</atom:published>
    <atom:updated>2025-01-06T21:58:27.000Z</atom:updated>
    <category>API</category>
    <category>Update</category>
    <category>Admin GraphQL API</category>
    <category>Events &amp; webhooks</category>
    <category>2025-01</category>
    <link>https://shopify.dev/changelog/update-in-orders-webhook-to-view-bundles-and-their-components</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/update-in-orders-webhook-to-view-bundles-and-their-components</guid>
  </item>
  <item>
    <title>Combined Listings update mutation error improvements</title>
    <description><![CDATA[ <div class=""><p>Starting with the Admin API version 2025-01, we've introduced new error codes for the <code>combinedListingUpdate</code> mutation. These enhancements aim to provide clearer feedback when incorrect data is submitted.</p>
<ul>
<li>The <code>missing_option_values</code> error occurs when the <code>optionsAndValues</code> field is required but not provided in the request.</li>
</ul>
</div> ]]></description>
    <pubDate>Wed, 01 Jan 2025 12:00:00 +0000</pubDate>
    <atom:published>2025-01-01T12:00:00.000Z</atom:published>
    <atom:updated>2025-01-17T16:08:45.000Z</atom:updated>
    <category>API</category>
    <category>Update</category>
    <category>Admin GraphQL API</category>
    <category>2025-01</category>
    <link>https://shopify.dev/changelog/combined-listings-update-mutation-error-improvements</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/combined-listings-update-mutation-error-improvements</guid>
  </item>
  <item>
    <title>Public apps must use new GraphQL Product APIs to be accepted in the Shopify App Store</title>
    <description><![CDATA[ <div class=""><p>Starting January 6, 2025, all new apps submitted to the Shopify App Store must use the <a href="https://shopify.dev/changelog/new-graphql-product-apis-that-support-up-to-2000-variants-now-available-in-2024-04" target="_blank" class="body-link">new GraphQL Product APIs</a>. After this date, apps that query <a href="https://shopify.dev/docs/apps/build/graphql/migrate/new-product-model/api-updates#deprecated-rest-endpoints" target="_blank" class="body-link">deprecated REST API product resources</a> won’t be approved.</p>
<p>As of February 1, 2025, all public apps must migrate to the <a href="https://shopify.dev/changelog/new-graphql-product-apis-that-support-up-to-2000-variants-now-available-in-2024-04" target="_blank" class="body-link">new GraphQL Product APIs</a>. This includes apps already listed in the Shopify App Store. </p>
<p>Public apps are always required to use currently supported APIs. To learn more about the specific changes to Shopify’s product APIs, and how to update your app, check out our <a href="https://shopify.dev/docs/apps/build/graphql/migrate/new-product-model" target="_blank" class="body-link">migration guide</a>.</p>
</div> ]]></description>
    <pubDate>Wed, 01 Jan 2025 05:01:00 +0000</pubDate>
    <atom:published>2025-01-01T05:01:00.000Z</atom:published>
    <atom:updated>2025-01-01T05:01:00.000Z</atom:updated>
    <category>Action Required</category>
    <category>App store</category>
    <category>Update</category>
    <category>Admin GraphQL API</category>
    <category>Admin REST API</category>
    <link>https://shopify.dev/changelog/public-apps-must-use-new-graphql-product-apis-to-be-accepted-in-the-shopify-app-store</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/public-apps-must-use-new-graphql-product-apis-to-be-accepted-in-the-shopify-app-store</guid>
  </item>
  <item>
    <title>Link any product metafields of type list.metaobject to product options</title>
    <description><![CDATA[ <div class=""><p>Up until now, merchants had the ability to link their options to category metafields, allowing them to use these option values across similar products. This release expands that functionality to include any metaobject reference list. </p>
<p>More details about this update can be found at <a href="https://shopify.dev/docs/apps/build/graphql/migrate/new-product-model/metafield-linked" target="_blank" class="body-link">Shopify.dev</a>.</p>
</div> ]]></description>
    <pubDate>Wed, 01 Jan 2025 05:00:00 +0000</pubDate>
    <atom:published>2025-01-01T05:00:00.000Z</atom:published>
    <atom:updated>2025-01-01T05:00:00.000Z</atom:updated>
    <category>API</category>
    <category>Update</category>
    <category>Admin GraphQL API</category>
    <link>https://shopify.dev/changelog/link-any-product-metafields-of-type-list-metaobject-to-product-options</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/link-any-product-metafields-of-type-list-metaobject-to-product-options</guid>
  </item>
  <item>
    <title>Cart Delivery Address Management</title>
    <description><![CDATA[ <div class=""><p>We've refined and improved how delivery addresses are handled by making <code>deliveryAddresses</code> a required input field within a new delivery object. </p>
<p>As of API version 2025-01, the <a href="https://shopify.dev/docs/api/storefront/2025-01/objects/CartBuyerIdentity#field-deliveryaddresspreferences" target="_blank" class="body-link"><code>deliveryAddressPreferences</code></a> field on the <code>CartBuyerIdentity</code> object is deprecated. Use the new <a href="https://shopify.dev/docs/api/storefront/2025-01/objects/CartDelivery#field-addresses" target="_blank" class="body-link"><code>addresses</code></a> field on the <code>CartDelivery</code> object instead.</p>
<p>We've added the following new mutations for managing delivery addresses on carts:</p>
<ul>
<li><a href="https://shopify.dev/docs/api/storefront/2025-01/mutations/cartDeliveryAddressesAdd" target="_blank" class="body-link"><code>cartDeliveryAddressesAdd</code></a></li>
<li><a href="https://shopify.dev/docs/api/storefront/2025-01/mutations/cartDeliveryAddressesUpdate" target="_blank" class="body-link"><code>cartDeliveryAddressesUpdate</code></a></li>
<li><a href="https://shopify.dev/docs/api/storefront/2025-01/mutations/cartDeliveryAddressesRemove" target="_blank" class="body-link"><code>cartDeliveryAddressesRemove</code></a></li>
</ul>
<p>For cart delivery addresses, you can set an address as <code>selected</code> to indicate that delivery rates should be calculated. This improves performance by avoiding unnecessary rate generation. It also ensures that addresses are synchronized between Checkout and Cart, maintaining a single source of truth for any updates or changes.</p>
<p>We recommend reviewing your current integration and preparing to adopt the new field and mutations.</p>
</div> ]]></description>
    <pubDate>Wed, 01 Jan 2025 05:00:00 +0000</pubDate>
    <atom:published>2025-01-01T05:00:00.000Z</atom:published>
    <atom:updated>2025-01-01T05:00:00.000Z</atom:updated>
    <category>Action Required</category>
    <category>API</category>
    <category>Deprecation announcement</category>
    <category>Storefront API</category>
    <category>2025-01</category>
    <link>https://shopify.dev/changelog/cart-delivery-address-management</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/cart-delivery-address-management</guid>
  </item>
  <item>
    <title>Fulfillment Hold Access Update For Node Queries</title>
    <description><![CDATA[ <div class=""><p>As of the Admin API version 2025-01, apps using the <a href="https://shopify.dev/docs/api/admin-graphql/2025-01/objects/FulfillmentHold#interface-node" target="_blank" class="body-link">node or nodes GraphQL queries</a> to fetch fulfillment holds will only be able to fetch those that belong to a fulfillment order that they have access to.</p>
<p>If your app has the <code>read_merchant_managed_fulfillment_orders</code> scope, you will be able to access holds on fulfillment orders assigned to a merchant managed location.</p>
<p>If your app has the <code>read_assigned_fulfillment_orders</code> scope, you will be able to access holds on fulfillment orders assigned to locations belonging to your app.</p>
<p>If your app has the <code>read_third_party_fulfillment_orders</code> scope, you will be able to access holds on fulfillment orders assigned to a third party location.</p>
<p>If your app has the <code>read_marketplace_fulfillment_orders</code> scope, you will be able to access holds on fulfillment orders which belong to one of your marketplace's orders.</p>
<h3>How will this change effect my app?</h3>
<p>This change will only effect apps which fetch fulfillment holds using a <a href="https://shopify.dev/docs/api/admin-graphql/2025-01/objects/FulfillmentHold#interface-node" target="_blank" class="body-link">node or nodes GraphQL query</a> using the Admin API.</p>
<p>If your app does not currently have sufficient access scopes as defined above then you will need to request the correct access scopes before migrating to the 2025-01 API version.</p>
<p>When using a <a href="https://shopify.dev/docs/api/admin-graphql/2025-01/objects/FulfillmentHold#interface-node" target="_blank" class="body-link">node or nodes query</a> to fetch a holds, if your app does not have sufficient access to access the hold then <code>null</code> will be returned for any holds that you do not have access to.</p>
<p>See the <a href="https://shopify.dev/docs/api/admin-graphql/2025-01/objects/FulfillmentHold" target="_blank" class="body-link">fulfillment hold resource</a> for more information on what scopes are required.</p>
<p>See the API access scopes section of <a href="https://shopify.dev/docs/api/admin-graphql/2024-10/objects/FulfillmentOrder" target="_blank" class="body-link">the FulfillmentOrder resource</a> for more information about these scopes.</p>
</div> ]]></description>
    <pubDate>Wed, 01 Jan 2025 05:00:00 +0000</pubDate>
    <atom:published>2025-01-01T05:00:00.000Z</atom:published>
    <atom:updated>2025-01-01T05:00:00.000Z</atom:updated>
    <category>Action Required</category>
    <category>API</category>
    <category>Update</category>
    <category>Admin GraphQL API</category>
    <category>2025-01</category>
    <link>https://shopify.dev/changelog/fulfillment-hold-access-update-for-node-queries</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/fulfillment-hold-access-update-for-node-queries</guid>
  </item>
  <item>
    <title>New customer's webhook and changes to existing customer's webhooks payload</title>
    <description><![CDATA[ <div class=""><p>As of 2025-01, we're changing how a customer is represented in webhooks:</p>
<ul>
<li>We added the <code>customers/purchasing_summary</code> webhook.</li>
<li>We made some changes affecting webhooks containing a customer payload:<ul>
<li>We removed <code>tags</code> in favour of the <code>customer.tags_added</code> and <code>customer.tags_removed</code> webhooks.</li>
<li>We removed <code>email_marketing_consent</code> in favour of the <code>customers/email_marketing_consent_update</code>.</li>
<li>We removed <code>sms_marketing_consent</code> in favour of the <code>customers/marketing_consent_update</code>.</li>
<li>We removed the following fields: <code>last_order_id</code>, <code>last_order_name</code>, <code>total_spent</code>, and <code>orders_count</code>. They are now available in the new <code>customers/purchasing_summary</code> webhook except for <code>last_order_name</code> being deprecated.</li>
</ul>
</li>
</ul>
<p>The webhooks containing a customer payload are the following:</p>
<ul>
<li><code>checkouts/create</code></li>
<li><code>checkouts/update</code></li>
<li><code>customers/create</code></li>
<li><code>customers/delete</code></li>
<li><code>customers/disable</code></li>
<li><code>customers/enable</code></li>
<li><code>customers/update</code></li>
<li><code>draft_orders/create</code></li>
<li><code>draft_orders/update</code></li>
<li><code>orders/cancelled</code></li>
<li><code>orders/create</code></li>
<li><code>orders/fulfilled</code></li>
<li><code>orders/paid</code></li>
<li><code>orders/partially_fulfilled</code></li>
<li><code>orders/updated</code></li>
</ul>
<p>Learn more about webhook topics on <a href="https://shopify.dev/docs/api/admin-graphql/2025-01/enums/WebhookSubscriptionTopic" target="_blank" class="body-link">Shopify.dev</a>.</p>
</div> ]]></description>
    <pubDate>Wed, 01 Jan 2025 05:00:00 +0000</pubDate>
    <atom:published>2025-01-01T05:00:00.000Z</atom:published>
    <atom:updated>2025-10-06T13:42:21.000Z</atom:updated>
    <category>Action Required</category>
    <category>API</category>
    <category>Update</category>
    <category>Events &amp; webhooks</category>
    <category>2025-01</category>
    <link>https://shopify.dev/changelog/new-customer-s-webhook-and-changes-to-existing-customer-s-webhooks-payload</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/new-customer-s-webhook-and-changes-to-existing-customer-s-webhooks-payload</guid>
  </item>
  <item>
    <title>Change to FulfillmentOrderSortKeys</title>
    <description><![CDATA[ <div class=""><p>Starting in API version <strong>2025-01</strong>, RELEVANCE will be removed as a valid value from <a href="https://shopify.dev/docs/api/admin-graphql/2024-10/enums/FulfillmentOrderSortKeys" target="_blank" class="body-link">FulfillmentOrderSortKeys</a> in the GraphQL Admin API. </p>
</div> ]]></description>
    <pubDate>Wed, 01 Jan 2025 05:00:00 +0000</pubDate>
    <atom:published>2025-01-01T05:00:00.000Z</atom:published>
    <atom:updated>2025-01-01T05:00:00.000Z</atom:updated>
    <category>API</category>
    <category>Deprecation announcement</category>
    <category>Admin GraphQL API</category>
    <category>2025-01</category>
    <link>https://shopify.dev/changelog/change-to-fulfillmentordersortkeys</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/change-to-fulfillmentordersortkeys</guid>
  </item>
  <item>
    <title>Introduce 3DS support for verifications</title>
    <description><![CDATA[ <div class=""><p>As of version <code>2025-01</code>, payments extensions that support vaulting will now be able to process 3DS challenges for verifications. That is possible through : </p>
<ul>
<li>A new mutation, <code>VerificationSessionRedirect</code>  </li>
<li>New arguments to the existing <code>VerificationSessionResolve</code> and <code>VerificationSessionReject</code> mutations.</li>
</ul>
<p>If 3DS is required for a verification, you must use the <code>VerificationSessionRedirect</code> mutation. When resolving or rejecting a verification that required 3DS, pass the authentication argument to either the <code>VerificationSessionResolve</code> or <code>VerificationSessionReject</code> mutation.</p>
<p>We're also deprecating the following <code>VerificationSessionStateReason</code>:
<code>REQUIRED_3DS_CHALLENGE</code> . Use the new <code>VerificationSessionRedirect</code> mutation instead.</p>
<p>For payments extensions that support vaulting, we strongly recommend you to update it to the <code>2025-01</code> version as soon as possible.</p>
</div> ]]></description>
    <pubDate>Wed, 01 Jan 2025 05:00:00 +0000</pubDate>
    <atom:published>2025-01-01T05:00:00.000Z</atom:published>
    <atom:updated>2025-01-01T05:00:00.000Z</atom:updated>
    <category>Action Required</category>
    <category>API</category>
    <category>Update</category>
    <category>Payments Apps API</category>
    <category>2025-01</category>
    <link>https://shopify.dev/changelog/introduce-3ds-support-for-verifications</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/introduce-3ds-support-for-verifications</guid>
  </item>
  <item>
    <title>BXGY discount support for subscriptions</title>
    <description><![CDATA[ <div class=""><p>As of 2025-01, Buy X Get Y (BXGY) discounts support subscriptions, only in cases where X is a subscription and Y is a one-time purchase item at a discounted price or a free item.</p>
<p>You can use the <a href="https://shopify.dev/docs/api/admin-graphql/2025-01/mutations/discountAutomaticBxgyCreate" target="_blank" class="body-link">discountAutomaticBxgyCreate</a> or <a href="https://shopify.dev/docs/api/admin-graphql/2025-01/mutations/discountCodeBxgyCreate" target="_blank" class="body-link">discountCodeBxgyCreate</a> mutations to create a new BXGY discount, or the <a href="https://shopify.dev/docs/api/admin-graphql/2025-01/mutations/discountAutomaticBxgyUpdate" target="_blank" class="body-link">discountAutomaticBxgyUpdate</a> or <a href="https://shopify.dev/docs/api/admin-graphql/2025-01/mutations/discountCodeBxgyUpdate" target="_blank" class="body-link">discountCodeBxgyUpdate</a> mutations to update an existing BXGY discount. Use the isOneTimePurchase and isSubscription fields on <a href="https://shopify.dev/docs/api/admin-graphql/2025-01/input-objects/DiscountCustomerBuysInput" target="_blank" class="body-link">DiscountCustomerBuysInput</a> to specify which items can be discounted.</p>
<p>Learn more <a href="https://shopify.dev/docs/apps/build/discounts#build-with-the-graphql-admin-api" target="_blank" class="body-link">building discounts with GraphQL Admin API</a>.</p>
</div> ]]></description>
    <pubDate>Wed, 01 Jan 2025 05:00:00 +0000</pubDate>
    <atom:published>2025-01-01T05:00:00.000Z</atom:published>
    <atom:updated>2025-01-01T05:00:00.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <category>Admin GraphQL API</category>
    <category>2025-01</category>
    <link>https://shopify.dev/changelog/bxgy-discount-support-for-subscriptions</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/bxgy-discount-support-for-subscriptions</guid>
  </item>
  <item>
    <title>Apply multiple holds to a single fulfillment order</title>
    <description><![CDATA[ <div class=""><p>With the introduction of support for placing more than one hold per fulfillment order, you can quickly and easily add another hold each time an issue arises. With all of the reasons captured separately, you can release individual holds confidently, safe in the knowledge that all other reasons are captured in their own holds.</p>
<h2>Migrating to the <code>2025-01</code> GraphQL API version</h2>
<h3>Fetch all holds for a fulfillment order</h3>
<p>As of the <code>2025-01</code> API version, the <a href="https://shopify.dev/docs/api/admin-graphql/2025-01/objects/FulfillmentOrder#field-fulfillmentholds" target="_blank" class="body-link">fulfillmentOrder.fulfillmentHolds field</a> now returns all active holds applied to a fulfillment order.</p>
<h3>Place multiple holds per fulfillment order</h3>
<p>As of the <code>2025-01</code> API version, the <a href="https://shopify.dev/docs/api/admin-graphql/2025-01/mutations/fulfillmentOrderHold" target="_blank" class="body-link">fulfillmentOrderHold mutation</a> can now be successfully executed on fulfillment orders that are already on hold.</p>
<p>To place multiple holds on a fulfillment order, apps need to supply the new <a href="https://shopify.dev/docs/api/admin-graphql/2025-01/objects/FulfillmentHold#field-handle" target="_blank" class="body-link">handle field</a>. This field is a unique identifier for the holds placed by an app and prevents apps from inadvertently creating duplicate holds. The handle must be unique among the holds that the app has placed on a single fulfillment order. If an app attempts to place two holds with the same handle, the second hold will be rejected with <a href="https://shopify.dev/docs/api/admin-graphql/2025-01/enums/FulfillmentOrderHoldUserErrorCode#value-duplicatefulfillmentholdhandle" target="_blank" class="body-link">a duplicate hold user error</a>. For backward compatibility, the handle field is optional and will default to an empty string. However, a single app will not be able to place multiple holds on a fulfillment order without supplying a unique handle for each, as, by default, each hold will get the same default handle.</p>
<p>Each app can place up to 10 active holds per fulfillment order. After this, the mutation will return <a href="https://shopify.dev/docs/api/admin-graphql/2025-01/enums/FulfillmentOrderHoldUserErrorCode#value-fulfillmentorderholdlimitreached" target="_blank" class="body-link">a user error indicating that the limit has been reached</a>. The app would need to release one of its existing holds before being able to apply a new one.</p>
<p>When placing a hold on a fulfillment order that is already held, the <a href="https://shopify.dev/docs/api/admin-graphql/2025-01/input-objects/FulfillmentOrderHoldInput#field-fulfillmentorderlineitems" target="_blank" class="body-link">fulfillmentHold.fulfillmentOrderLineItems input field</a> should not be supplied. If this field is supplied, <a href="https://shopify.dev/docs/api/admin-graphql/2025-01/enums/FulfillmentOrderHoldUserErrorCode#value-fulfillmentordernotsplittable" target="_blank" class="body-link">a user error will be returned indicating that the fulfillment order is not able to be split</a>.</p>
<p>The <a href="https://shopify.dev/docs/api/admin-graphql/2025-01/objects/fulfillmentorder#field-supportedactions" target="_blank" class="body-link">fulfillmentOrder.supportedActions</a> field will now return the <a href="https://shopify.dev/docs/api/admin-graphql/2025-01/enums/FulfillmentOrderAction#value-hold" target="_blank" class="body-link">HOLD</a> action when a fulfillment order is on hold and an additional hold can be added.</p>
<h3>Supply hold id's when releasing holds <em>(highly recommended)</em></h3>
<p>It is highly recommended that all apps that release holds specify the hold IDs when releasing. <a href="https://shopify.dev/changelog/fulfillment-holds-now-able-to-be-released-by-id" target="_blank" class="body-link">Support for releasing holds by id was introduced in the 2024-10 API version</a>. Releasing all holds on a fulfillment order without supplying the hold IDs will result in the fulfillment order being released prematurely and items being incorrectly fulfilled.</p>
<h3>Listen for individual holds being placed and released webhooks</h3>
<p>As of the <code>2025-01</code> API version, two new webhook topics are available for the fulfillment hold resource: <a href="https://shopify.dev/docs/api/webhooks?reference=toml#list-of-topics-fulfillment_holds/added" target="_blank" class="body-link">fulfillment_holds/added</a> and <a href="https://shopify.dev/docs/api/webhooks?reference=toml#list-of-topics-fulfillment_holds/released" target="_blank" class="body-link">fulfillment_holds/released</a>.</p>
<p>The new webhooks will be emitted each time a hold is placed and released.</p>
<h3>Continue to listen for fulfillment orders being held and released using existing webhooks</h3>
<p>The <a href="https://shopify.dev/docs/api/webhooks?reference=toml#list-of-topics-fulfillment_orders/placed_on_hold" target="_blank" class="body-link">fulfillment_orders/placed_on_hold</a> and <a href="https://shopify.dev/docs/api/webhooks?reference=toml#list-of-topics-fulfillment_orders/hold_released" target="_blank" class="body-link">fulfillment_orders/hold_released</a> topics will continue to be emitted in the same way as before.</p>
<ul>
<li>The <a href="https://shopify.dev/docs/api/webhooks?reference=toml#list-of-topics-fulfillment_orders/placed_on_hold" target="_blank" class="body-link">fulfillment_orders/placed_on_hold</a> webhook is emitted when a fulfillment order transitions to the <code>ON_HOLD</code> status.</li>
<li>The <a href="https://shopify.dev/docs/api/webhooks?reference=toml#list-of-topics-fulfillment_orders/hold_released" target="_blank" class="body-link">fulfillment_orders/hold_released</a> webhook is emitted when a fulfillment order is released from all holds and is no longer on hold.</li>
</ul>
<p>As of the <code>2025-01</code> API version, now that a fulfillment order can have multiple holds, the <code>fulfillment_order.fulfillment_holds</code> field in the <a href="https://shopify.dev/docs/api/webhooks?reference=toml#list-of-topics-fulfillment_orders/placed_on_hold" target="_blank" class="body-link">fulfillment_orders/placed_on_hold</a> webhook payload can now return multiple holds.</p>
<h2>Using GraphQL API versions prior to 2025-01</h2>
<h3>Continue to get the first hold placed on a fulfillment order</h3>
<p>The <a href="https://shopify.dev/docs/api/admin-graphql/2024-10/objects/FulfillmentOrder#field-fulfillmentholds" target="_blank" class="body-link">fulfillment holds field on a fulfillment order</a> will continue to return an array of a single hold. If multiple holds exist on the fulfillment order, the oldest active hold will be returned. Once this hold is released, the next earliest will be returned until no holds remain.</p>
<h3>Continue to place a single hold per fulfillment order</h3>
<p>The <a href="https://shopify.dev/docs/api/admin-graphql/2024-10/mutations/fulfillmentOrderHold" target="_blank" class="body-link">fulfillmentOrderHold mutation</a> will continue to only support placing a single hold per fulfillment order.</p>
<p>If an app attempts to place a hold on a fulfillment order that is already being held, the same error will be returned as was previously returned. It will be a user error with a message saying &quot;<code>Cannot apply a fulfillment hold on a fulfillment order in an uninterruptible state.</code>&quot;.</p>
<h3>Continue to release all holds from a fulfillment order <em>(discouraged)</em></h3>
<p>The <a href="https://shopify.dev/docs/api/admin-graphql/2024-10/mutations/FulfillmentOrderReleaseHold" target="_blank" class="body-link">fulfillmentOrderReleaseHold mutation</a> will continue to release the fulfillment order from being held by releasing it from all holds at once if no hold IDs are supplied.</p>
<p>It is <ins>highly recommended</ins> that all apps which release holds migrate to using the <code>2024-10</code> API version or newer, so that they can selectively release holds by ID by specifying the <a href="https://shopify.dev/docs/api/admin-graphql/2024-10/mutations/FulfillmentOrderReleaseHold#argument-holdids" target="_blank" class="body-link">holdIds</a> mutation argument. Releasing all holds on a fulfillment order without supplying the hold IDs will result in the fulfillment order being released prematurely and items being incorrectly fulfilled.</p>
<h3>Continue to listen for fulfillment orders being held and released using existing webhooks</h3>
<p>The <a href="https://shopify.dev/docs/api/webhooks?reference=toml#list-of-topics-fulfillment_orders/placed_on_hold" target="_blank" class="body-link">fulfillment_orders/placed_on_hold</a> and <a href="https://shopify.dev/docs/api/webhooks?reference=toml#list-of-topics-fulfillment_orders/hold_released" target="_blank" class="body-link">fulfillment_orders/hold_released</a> topics will continue to be emitted in the same way as before.</p>
<ul>
<li>The <a href="https://shopify.dev/docs/api/webhooks?reference=toml#list-of-topics-fulfillment_orders/placed_on_hold" target="_blank" class="body-link">fulfillment_orders/placed_on_hold</a> webhook is emitted when a fulfillment order transitions to the <code>ON_HOLD</code> status.</li>
<li>The <a href="https://shopify.dev/docs/api/webhooks?reference=toml#list-of-topics-fulfillment_orders/hold_released" target="_blank" class="body-link">fulfillment_orders/hold_released</a> webhook is emitted when a fulfillment order is released from all holds and is no longer on hold.</li>
</ul>
<p>The <code>fulfillment_order[&quot;fulfillment_holds&quot;]</code> field in the webhooks payload will continue to return an array of a single hold.
If multiple holds exist on the fulfillment order, the oldest active hold will be returned.</p>
<h2>Using the REST API to interact with holds <em>(discouraged)</em></h2>
<p>The <ins>REST API will not support multiple holds per fulfillment order</ins>. Apps should migrate to using the GraphQL API if they wish to use this feature.</p>
<h3>Continue to get the first hold placed on a fulfillment order</h3>
<p>The <a href="https://shopify.dev/docs/api/admin-rest/2025-01/resources/fulfillmentorder" target="_blank" class="body-link">fulfillment holds attribute on the fulfilment order resource</a> will continue showing only the one oldest active hold under scenarios of multiple holds. Once this hold is released, the next earliest will be returned until no holds remain.</p>
<h3>Continue to place a single hold per fulfillment order</h3>
<p>The <a href="https://shopify.dev/docs/api/admin-rest/2025-01/resources/fulfillmentorder#post-fulfillment-orders-fulfillment-order-id-hold" target="_blank" class="body-link">hold endpoint</a> will continue to only support placing a single hold per fulfillment order.</p>
<p>If an app attempts to place a hold on a fulfillment order that is already being held, the same error will be returned as was previously returned.</p>
<h3>Continue to release all holds from a fulfillment order <em>(discouraged)</em></h3>
<p>The <a href="https://shopify.dev/docs/api/admin-rest/2025-01/resources/fulfillmentorder#post-fulfillment-orders-fulfillment-order-id-release-hold" target="_blank" class="body-link">release hold endpoint</a> will continue to release the fulfillment order from being held by releasing it from all holds at once.</p>
<p>It is <ins>highly recommended</ins> that all apps which release holds migrate to using the <a href="https://shopify.dev/docs/api/admin-graphql/2025-01/mutations/FulfillmentOrderReleaseHold" target="_blank" class="body-link">fulfillmentOrderReleaseHold mutation</a>, so that they can selectively release holds by ID. Releasing all holds on a fulfillment order without supplying the hold IDs will result in the fulfillment order being released prematurely and items being incorrectly fulfilled.</p>
<h3>Continue to listen for fulfillment orders being held and released using existing webhooks</h3>
<p>The <a href="https://shopify.dev/docs/api/webhooks?reference=toml#list-of-topics-fulfillment_orders/placed_on_hold" target="_blank" class="body-link">fulfillment_orders/placed_on_hold</a> and <a href="https://shopify.dev/docs/api/webhooks?reference=toml#list-of-topics-fulfillment_orders/hold_released" target="_blank" class="body-link">fulfillment_orders/hold_released</a> topics will continue to be emitted in the same way as before.</p>
<ul>
<li>The <a href="https://shopify.dev/docs/api/webhooks?reference=toml#list-of-topics-fulfillment_orders/placed_on_hold" target="_blank" class="body-link">fulfillment_orders/placed_on_hold</a> webhook is emitted when a fulfillment order transitions to the <code>ON_HOLD</code> status.</li>
<li>The <a href="https://shopify.dev/docs/api/webhooks?reference=toml#list-of-topics-fulfillment_orders/hold_released" target="_blank" class="body-link">fulfillment_orders/hold_released</a> webhook is emitted when a fulfillment order is released from all holds and is no longer on hold.</li>
</ul>
<p>The <code>fulfillment_order[&quot;fulfillment_holds&quot;]</code> field in the webhooks payload will continue to return an array of a single hold.
If multiple holds exist on the fulfillment order, the oldest active hold will be returned.</p>
<h2>Learn more</h2>
<p>Learn more about <a href="https://help.shopify.com/en/manual/fulfillment/fulfilling-orders/holding-fulfillments" target="_blank" class="body-link">putting an order's fulfillment on hold</a>.</p>
</div> ]]></description>
    <pubDate>Wed, 01 Jan 2025 05:00:00 +0000</pubDate>
    <atom:published>2025-01-01T05:00:00.000Z</atom:published>
    <atom:updated>2025-01-01T05:00:00.000Z</atom:updated>
    <category>Action Required</category>
    <category>API</category>
    <category>Update</category>
    <category>Admin GraphQL API</category>
    <category>Admin REST API</category>
    <category>Events &amp; webhooks</category>
    <category>2025-01</category>
    <link>https://shopify.dev/changelog/apply-multiple-holds-to-a-single-fulfillment-order</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/apply-multiple-holds-to-a-single-fulfillment-order</guid>
  </item>
  <item>
    <title>Addition of 'paymentDetails' field in `verificationSessionResolve` mutation.</title>
    <description><![CDATA[ <div class=""><p>As of Payments Apps API version <strong>2025-01</strong> release, the <code>paymentDetails</code> field 
will be addded to <code>verificationSessionResolve</code> mutation. Payment providers can now send payment details like Card Information etc. as an argument.</p>
</div> ]]></description>
    <pubDate>Wed, 01 Jan 2025 05:00:00 +0000</pubDate>
    <atom:published>2025-01-01T05:00:00.000Z</atom:published>
    <atom:updated>2025-01-01T05:00:00.000Z</atom:updated>
    <category>API</category>
    <category>Update</category>
    <category>Payments Apps API</category>
    <category>2025-01</category>
    <link>https://shopify.dev/changelog/addition-of-paymentdetails-field-in-verificationsessionresolve-mutation</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/addition-of-paymentdetails-field-in-verificationsessionresolve-mutation</guid>
  </item>
  <item>
    <title>Enhanced variant query limits for single product queries</title>
    <description><![CDATA[ <div class=""><p>As of the <strong>2025-01</strong> version of the GraphQL Admin API, you can now use a limit of up to 2000 variants when running a query on a single product, such as <code>product</code> or <code>productByHandle</code>. This enhanced limit does not apply if you make multiple queries in one request, or are accessing the variants any other way except through the <code>variants</code> connection.</p>
<p>Learn more about the <a href="https://shopify.dev/docs/api/admin-graphql/2024-10/objects/Product" target="_blank" class="body-link">product</a> object on <a href="https://shopify.dev/" target="_blank" class="body-link">Shopify.dev</a>.</p>
</div> ]]></description>
    <pubDate>Wed, 01 Jan 2025 05:00:00 +0000</pubDate>
    <atom:published>2025-01-01T05:00:00.000Z</atom:published>
    <atom:updated>2025-01-01T05:00:00.000Z</atom:updated>
    <category>API</category>
    <category>Update</category>
    <category>Admin GraphQL API</category>
    <category>2025-01</category>
    <link>https://shopify.dev/changelog/enhanced-variant-query-limits-for-single-product-queries</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/enhanced-variant-query-limits-for-single-product-queries</guid>
  </item>
  <item>
    <title>Add new requiresShippingMethod field to fulfillmentServiceCreate and fulfillmentServiceUpdate mutations</title>
    <description><![CDATA[ <div class=""><p>As of Admin API 2025-04, we have introduced a new field <code>requiresShippingMethod</code> on the <a href="https://shopify.dev/docs/api/admin-graphql/2025-04/mutations/fulfillmentServiceCreate" target="_blank" class="body-link">fulfillmentServiceCreate</a> and <a href="https://shopify.dev/docs/api/admin-graphql/2025-04/mutations/fulfillmentServiceUpdate" target="_blank" class="body-link">fulfillmentServiceUpdate</a> mutations to bring these mutations in line with their REST API equivalents. </p>
</div> ]]></description>
    <pubDate>Wed, 01 Jan 2025 05:00:00 +0000</pubDate>
    <atom:published>2025-01-01T05:00:00.000Z</atom:published>
    <atom:updated>2025-01-02T15:44:30.000Z</atom:updated>
    <category>API</category>
    <category>Update</category>
    <category>Admin GraphQL API</category>
    <category>2025-04</category>
    <link>https://shopify.dev/changelog/add-new-requiresshippingmethod-field-to-fulfillmentservicecreate-and-fulfillmentserviceupdate-mutations</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/add-new-requiresshippingmethod-field-to-fulfillmentservicecreate-and-fulfillmentserviceupdate-mutations</guid>
  </item>
  <item>
    <title>Tax and Duties are deprecated in Storefront Cart API</title>
    <description><![CDATA[ <div class=""><p>As of API version <code>2025-01</code>, we're deprecating the <a href="https://shopify.dev/docs/api/storefront/2024-01/objects/Cart#field-cost" target="_blank" class="body-link">tax and duty</a> fields in Storefront API Cart. Tax and Duties are calculated at Checkout where they can be finalized with the complete context of the buyer's information, ensuring greater accuracy. </p>
</div> ]]></description>
    <pubDate>Wed, 01 Jan 2025 05:00:00 +0000</pubDate>
    <atom:published>2025-01-01T05:00:00.000Z</atom:published>
    <atom:updated>2025-01-01T05:00:00.000Z</atom:updated>
    <category>Action Required</category>
    <category>API</category>
    <category>Deprecation announcement</category>
    <category>Storefront API</category>
    <category>2025-01</category>
    <link>https://shopify.dev/changelog/tax-and-duties-are-deprecated-in-storefront-cart-api</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/tax-and-duties-are-deprecated-in-storefront-cart-api</guid>
  </item>
  <item>
    <title>ReverseFulfillmentOrder.order field is nullable as of 2025-01</title>
    <description><![CDATA[ <div class=""><!-- **IMPORTANT:** Posts won't go live, including at the scheduled date, unless they're reviewed and approved. Due to reduced resources, the dev docs team doesn't have the capacity to review changelog posts at this time. We recommend getting a member of the product team behind the change to do the review. 

Write a summary of the change. Check out the Developer changelog guidelines in the Vault: https://vault.shopify.io/pages/3468-Developer-changelog-posts. You can use markdown or the toolbar inserts to format text.

Here are some suggested formats for writing 2-3 sentences with an overview of the change and how it benefits or affects developers:

As of { API and version }, you can use the {object or resource} to {do something new}.
or
As of { API and version }, we're deprecating { description }. Use the { object or resource } instead.
or
You can now use { thing } to { do something new }.
or
We've added { thing } so that you can { do something }.

Describe any benefits { thing } has, or any action developers need to take and when they need to take it.
 
You can include links inline in the text, and add another link at the end in this format:

Learn more about { thing } on [Shopify.dev](URL).
-->



<p>As of <strong>2025-01</strong>,  <code>ReverseFulfillmentOrder.order</code> field is nullable.  An <code>Order</code> can be nullable if the client does not have access to the <a href="https://shopify.dev/docs/api/usage/access-scopes#orders-permissions" target="_blank" class="body-link"><code>read_all_orders</code></a> scope and the order is older than 60 days or no longer exists. For versions that predate <strong>2025-01</strong>, the order field will return a graphql error when the order is not available.</p>
<p>Learn more about <code>ReverseFulfillmentOrder</code> on <a href="https://shopify.dev/docs/api/admin-graphql/unstable/objects/ReverseFulfillmentOrder" target="_blank" class="body-link">Shopify.dev</a>.</p>
</div> ]]></description>
    <pubDate>Wed, 01 Jan 2025 05:00:00 +0000</pubDate>
    <atom:published>2025-01-01T05:00:00.000Z</atom:published>
    <atom:updated>2025-01-01T05:00:00.000Z</atom:updated>
    <category>API</category>
    <category>Update</category>
    <category>Admin GraphQL API</category>
    <category>2025-01</category>
    <link>https://shopify.dev/changelog/reversefulfillmentorder-order-field-is-nullable-as-of-2025-01</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/reversefulfillmentorder-order-field-is-nullable-as-of-2025-01</guid>
  </item>
  <item>
    <title>Support `Delayed` Fulfillment Status in GraphQL API</title>
    <description><![CDATA[ <div class=""><p>As of Admin API 2025-01, we have officially introduced a new <a href="https://shopify.dev/docs/api/admin-graphql/2024-10/enums/FulfillmentEventStatus" target="_blank" class="body-link">fulfillment event status</a> called <code>delayed</code>. </p>
</div> ]]></description>
    <pubDate>Wed, 01 Jan 2025 05:00:00 +0000</pubDate>
    <atom:published>2025-01-01T05:00:00.000Z</atom:published>
    <atom:updated>2025-01-01T05:00:00.000Z</atom:updated>
    <category>API</category>
    <category>Update</category>
    <category>Admin GraphQL API</category>
    <category>2025-01</category>
    <link>https://shopify.dev/changelog/support-delayed-fulfillment-status-in-graphql-api</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/support-delayed-fulfillment-status-in-graphql-api</guid>
  </item>
  <item>
    <title>Admin access input is now optional when setting metafield definition access</title>
    <description><![CDATA[ <div class=""><p>When creating or updating a metafield definition's <code>access</code> the <code>admin</code> field is now optional. When <code>admin</code> is not explicitly set, it will default the same way it is when the entire <code>access</code> field is omitted.</p>
<p>Learn more about metafield access controls on <a href="https://shopify.dev/docs/apps/build/custom-data/metafields/definitions/use-access-controls-metafields" target="_blank" class="body-link">Shopify.dev</a></p>
</div> ]]></description>
    <pubDate>Wed, 01 Jan 2025 05:00:00 +0000</pubDate>
    <atom:published>2025-01-01T05:00:00.000Z</atom:published>
    <atom:updated>2025-01-01T05:00:00.000Z</atom:updated>
    <category>API</category>
    <category>Update</category>
    <category>Admin GraphQL API</category>
    <category>2025-01</category>
    <link>https://shopify.dev/changelog/admin-access-input-is-now-optional-when-setting-metafield-definition-access</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/admin-access-input-is-now-optional-when-setting-metafield-definition-access</guid>
  </item>
  <item>
    <title>New validation against duplicate handles in productCreate, productUpdate, and productSet mutation inputs</title>
    <description><![CDATA[ <div class=""><p>As of the <code>2025-01</code> version of the Admin GraphQL API, the <code>handle</code> field in <a href="https://shopify.dev/docs/api/admin-graphql/latest/input-objects/ProductInput" target="_blank" class="body-link">productInput</a> for <a href="https://shopify.dev/docs/api/admin-graphql/latest/mutations/productCreate" target="_blank" class="body-link">productCreate</a> and <a href="https://shopify.dev/docs/api/admin-graphql/latest/mutations/productUpdate" target="_blank" class="body-link">productUpdate</a>, as well as in <a href="https://shopify.dev/docs/api/admin-graphql/latest/input-objects/ProductSetInput" target="_blank" class="body-link">productSetInput</a> for <a href="https://shopify.dev/docs/api/admin-graphql/latest/mutations/productSet" target="_blank" class="body-link">productSet</a> will be validated for uniqueness. This means that you will no longer be able to input a duplicate handle. This change does not affect existing behaviour when <code>handle</code> is not provided as input.</p>
<p>This enhancement ensures that there are no collisions when creating or updating product handles.</p>
</div> ]]></description>
    <pubDate>Wed, 01 Jan 2025 05:00:00 +0000</pubDate>
    <atom:published>2025-01-01T05:00:00.000Z</atom:published>
    <atom:updated>2025-01-01T05:00:00.000Z</atom:updated>
    <category>Action Required</category>
    <category>API</category>
    <category>Update</category>
    <category>Admin GraphQL API</category>
    <category>2025-01</category>
    <link>https://shopify.dev/changelog/new-validation-against-duplicate-handles-in-productcreate-productupdate-and-productset-mutation-inputs</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/new-validation-against-duplicate-handles-in-productcreate-productupdate-and-productset-mutation-inputs</guid>
  </item>
  <item>
    <title>Introduce a `tax_exempt` field associated to a `CompanyLocation` </title>
    <description><![CDATA[ <div class=""><p>The <code>CompanyLocationTaxSettings</code> now also contains the <code>tax_exemptions</code> and <code>tax_registration_id</code>. As a result, we have deprecated these fields from the root of <code>CompanyLocation.</code></p>
</div> ]]></description>
    <pubDate>Wed, 01 Jan 2025 05:00:00 +0000</pubDate>
    <atom:published>2025-01-01T05:00:00.000Z</atom:published>
    <atom:updated>2025-01-01T05:00:00.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <category>Admin GraphQL API</category>
    <category>Events &amp; webhooks</category>
    <category>2025-01</category>
    <link>https://shopify.dev/changelog/introduce-a-tax_exempt-field-associated-to-a-companylocation</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/introduce-a-tax_exempt-field-associated-to-a-companylocation</guid>
  </item>
  <item>
    <title>Events and Origins in Store Credit Account Transactions</title>
    <description><![CDATA[ <div class=""><p>As of Admin API version 2025-01, we've enhanced the store credit transaction object with two new features to provide more detailed insights into store credit transactions.</p>
<p><strong>New Types Introduced:</strong>  </p>
<ul>
<li><a href="https://shopify.dev/docs/api/admin-graphql/2025-01/objects/StoreCreditAccountCreditTransaction#field-origin" target="_blank" class="body-link"><code>StoreCreditAccountTransactionOrigin</code></a>: This type identifies the origin of a store credit transaction, offering additional context and traceability.  </li>
<li><a href="https://shopify.dev/docs/api/admin-graphql/2025-01/objects/StoreCreditAccountCreditTransaction#field-event" target="_blank" class="body-link"><code>StoreCreditSystemEvent</code></a>: This type details system events related to store credit transactions, facilitating improved tracking and auditing.</li>
</ul>
<p><strong>New Fields Added to Transaction Objects:</strong></p>
<ul>
<li>The <code>event</code> and <code>origin</code> fields are now part of the following transaction object types:  <ul>
<li><a href="https://shopify.dev/docs/api/admin-graphql/2025-01/objects/StoreCreditAccountCreditTransaction" target="_blank" class="body-link"><code>StoreCreditAccountCreditTransaction</code></a>  </li>
<li><a href="https://shopify.dev/docs/api/admin-graphql/2025-01/objects/StoreCreditAccountDebitRevertTransaction" target="_blank" class="body-link"><code>StoreCreditAccountDebitRevertTransaction</code></a>  </li>
<li><a href="https://shopify.dev/docs/api/admin-graphql/2025-01/objects/StoreCreditAccountDebitTransaction" target="_blank" class="body-link"><code>StoreCreditAccountDebitTransaction</code></a>  </li>
<li><a href="https://shopify.dev/docs/api/admin-graphql/2025-01/objects/StoreCreditAccountExpirationTransaction" target="_blank" class="body-link"><code>StoreCreditAccountExpirationTransaction</code></a>  </li>
<li><a href="https://shopify.dev/docs/api/admin-graphql/2025-01/objects/StoreCreditAccountCreditTransaction" target="_blank" class="body-link"><code>StoreCreditAccountTransaction</code></a></li>
</ul>
</li>
</ul>
<p>These enhancements allow you to access event and origin data for each transaction, enriching the store credit transaction data. By utilizing these new fields, you can gain deeper insights into transaction histories, enhancing financial reporting and customer service.</p>
<p>For detailed implementation instructions, please refer to our <a href="https://shopify.dev/docs/api/admin-graphql/2025-01/objects/StoreCreditAccountCreditTransaction" target="_blank" class="body-link">documentation</a>.</p>
</div> ]]></description>
    <pubDate>Tue, 31 Dec 2024 20:15:00 +0000</pubDate>
    <atom:published>2024-12-31T20:15:00.000Z</atom:published>
    <atom:updated>2025-01-30T14:28:22.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <category>Admin GraphQL API</category>
    <category>2025-01</category>
    <link>https://shopify.dev/changelog/events-and-origins-in-store-credit-account-transactions</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/events-and-origins-in-store-credit-account-transactions</guid>
  </item>
  <item>
    <title>Deprecate customer_payment_method_remote_credit_card_create</title>
    <description><![CDATA[ <div class=""><p>The mutation for <a href="https://shopify.dev/docs/api/admin-graphql/2024-10/mutations/customerPaymentMethodRemoteCreditCardCreate" target="_blank" class="body-link">CustomerPaymentMethodRemoteCreditCardCreate</a> has been deprecated and is now hidden. This mutation, which was used to create remote credit card payment methods for customers, is no longer supported as of API version 2025-01. Developers should update their integrations to use alternative methods for handling customer payment methods.</p>
</div> ]]></description>
    <pubDate>Tue, 31 Dec 2024 17:00:00 +0000</pubDate>
    <atom:published>2024-12-31T17:00:00.000Z</atom:published>
    <atom:updated>2025-03-23T20:48:04.000Z</atom:updated>
    <category>API</category>
    <category>Deprecation announcement</category>
    <category>Payments Apps API</category>
    <category>2025-01</category>
    <link>https://shopify.dev/changelog/deprecate-customerpaymentmethodremotecreditcardcreate</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/deprecate-customerpaymentmethodremotecreditcardcreate</guid>
  </item>
  <item>
    <title>Adding new revocation reasons for payment methods</title>
    <description><![CDATA[ <div class=""><p>We've added the <code>PAYMENTMETHODVERIFICATION_FAILED</code> value to the <a href="https://shopify.dev/docs/api/admin-graphql/latest/enums/CustomerPaymentMethodRevocationReason#value-paymentmethodverificationfailed" target="_blank" class="body-link"><code>CustomerPaymentMethodRevocationReason</code></a> enum.</p>
<p><code>CustomerPaymentMethodRevocationReason</code> specifies the reasons for revoking customer payment methods. The new value allows you to clearly indicate when a payment method is revoked due to verification failure, enhancing your ability to manage and track payment methods effectively.</p>
<p>Existing Partner integrations aren't affected.</p>
</div> ]]></description>
    <pubDate>Tue, 31 Dec 2024 17:00:00 +0000</pubDate>
    <atom:published>2024-12-31T17:00:00.000Z</atom:published>
    <atom:updated>2025-03-19T18:48:17.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <category>Payments Apps API</category>
    <category>2025-01</category>
    <link>https://shopify.dev/changelog/adding-new-revocation-reasons-for-payment-methods</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/adding-new-revocation-reasons-for-payment-methods</guid>
  </item>
  <item>
    <title>Updates effective December 30 to our Partner Program Agreement and API License and Terms of Use</title>
    <description><![CDATA[ <div class=""><p>EFFECTIVE DECEMBER 30, 2024 <strong>ACTION REQUIRED</strong></p>
<p>We've made changes to our <a href="https://www.shopify.ca/partners/terms?shpxid=823b80d5-C747-48F6-6CF0-832254EC6F4B" target="_blank" class="body-link">Partner Program Agreement</a> and <a href="https://www.shopify.com/legal/api-terms?shpxid=823b80d5-C747-48F6-6CF0-832254EC6F4B" target="_blank" class="body-link">API License and Terms of Use</a>. These updates include terms that are intended to support the growth of Shopify Partners and Merchants, while maintaining the security and integrity of products and services offered on our platform. </p>
<p>These changes come into effect as of today, December 30, 2024. Updates to Theme Revenue Share are effective January 1, 2025.</p>
<p>Continued use of Shopify services on or after Monday, December 30, 2024 confirms that you’ve read, understood, and accepted these new terms. For more information and frequently asked questions, please visit the <a href="https://help.shopify.com/en/partners/ppa-api-faq?shpxid=823b80d5-C747-48F6-6CF0-832254EC6F4B" target="_blank" class="body-link">Shopify Help Center</a>.</p>
</div> ]]></description>
    <pubDate>Mon, 30 Dec 2024 20:30:00 +0000</pubDate>
    <atom:published>2024-12-30T20:30:00.000Z</atom:published>
    <atom:updated>2024-12-30T20:30:00.000Z</atom:updated>
    <category>Action Required</category>
    <category>App store</category>
    <category>New</category>
    <link>https://shopify.dev/changelog/updates-effective-december-30-to-our-partner-program-agreement-and-api-license-and-terms-of-use</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/updates-effective-december-30-to-our-partner-program-agreement-and-api-license-and-terms-of-use</guid>
  </item>
  <item>
    <title>Updated requirement: Draft apps must not make calls to APIs that will be deprecated in 90 days or less</title>
    <description><![CDATA[ <div class=""><p>Starting January 6, 2025, draft apps that make calls to APIs that will be deprecated in 90 days or less will not be able to submit their apps for review. This is an updated requirement. Be sure to check your API Health report in your Partner Dashboard to ensure your app is querying supported APIs.</p>
<p>Public apps are always required to use currently supported APIs. To learn more about the specific changes to Shopify’s product APIs, and how to update your app, check out our <a href="https://shopify.dev/docs/apps/build/graphql/migrate/new-product-model" target="_blank" class="body-link">migration guide</a>.</p>
</div> ]]></description>
    <pubDate>Thu, 19 Dec 2024 17:00:00 +0000</pubDate>
    <atom:published>2024-12-19T17:00:00.000Z</atom:published>
    <atom:updated>2024-12-19T17:00:00.000Z</atom:updated>
    <category>Action Required</category>
    <category>App store</category>
    <category>Update</category>
    <link>https://shopify.dev/changelog/updated-requirement-draft-apps-must-not-make-calls-to-apis-that-will-be-deprecated-in-90-days-or-less</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/updated-requirement-draft-apps-must-not-make-calls-to-apis-that-will-be-deprecated-in-90-days-or-less</guid>
  </item>
  <item>
    <title>Deprecated `SubscriptionMailingAddress` in favor of `MailingAddress`</title>
    <description><![CDATA[ <div class=""><p>As of the 2025-07 version of the GraphQL Admin API, we've deprecated the <a href="/docs/api/admin-graphql/2025-01/objects/SubscriptionMailingAddress" target="_blank" class="body-link"><code>SubscriptionMailingAddress</code></a> object. Use the <a href="/docs/api/admin-graphql/2025-01/objects/MailingAddress" target="_blank" class="body-link"><code>MailingAddress</code></a> object instead.</p>
</div> ]]></description>
    <pubDate>Thu, 19 Dec 2024 17:00:00 +0000</pubDate>
    <atom:published>2024-12-19T17:00:00.000Z</atom:published>
    <atom:updated>2025-03-25T21:47:07.000Z</atom:updated>
    <category>Action Required</category>
    <category>API</category>
    <category>Breaking API Change</category>
    <category>Admin GraphQL API</category>
    <category>2025-07</category>
    <link>https://shopify.dev/changelog/deprecate-subscriptionmailingaddress-in-favour-of-mailingaddress</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/deprecate-subscriptionmailingaddress-in-favour-of-mailingaddress</guid>
  </item>
  <item>
    <title>Meta Pixel events for App Listing Page</title>
    <description><![CDATA[ <div class=""><p>App listing pages now support <a href="https://developers.facebook.com/docs/meta-pixel/reference/" target="_blank" class="body-link">Meta Pixel events</a>, which are tracking actions like <code>AddToCart</code> and <code>ViewContent</code>. These events help in monitoring user interactions on your site.</p>
</div> ]]></description>
    <pubDate>Wed, 18 Dec 2024 17:00:00 +0000</pubDate>
    <atom:published>2024-12-18T17:00:00.000Z</atom:published>
    <atom:updated>2024-12-18T17:00:00.000Z</atom:updated>
    <category>App store</category>
    <category>Update</category>
    <link>https://shopify.dev/changelog/meta-pixel-events-for-app-listing-page</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/meta-pixel-events-for-app-listing-page</guid>
  </item>
  <item>
    <title>Meta Pixel events for Theme Listing Page</title>
    <description><![CDATA[ <div class=""><p>Theme listing pages now support <a href="https://developers.facebook.com/docs/meta-pixel/reference/" target="_blank" class="body-link">Meta Pixel events</a>, which are tracking actions like <code>AddToCart</code> and <code>ViewContent</code>. These events help in monitoring user interactions on your site.</p>
</div> ]]></description>
    <pubDate>Wed, 18 Dec 2024 17:00:00 +0000</pubDate>
    <atom:published>2024-12-18T17:00:00.000Z</atom:published>
    <atom:updated>2024-12-18T17:00:00.000Z</atom:updated>
    <category>Themes</category>
    <category>Update</category>
    <link>https://shopify.dev/changelog/meta-pixel-events-for-theme-listing-page</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/meta-pixel-events-for-theme-listing-page</guid>
  </item>
  <item>
    <title>Removal of deprecated shop fields</title>
    <description><![CDATA[ <div class=""><p>As of Admin GraphQL API <code>2025-01</code>, some previously deprecated fields have been removed which have replacements:</p>
<ul>
<li><a href="https://shopify.dev/docs/api/admin-graphql/2024-10/objects/Shop#field-collectionbyhandle" target="_blank" class="body-link"><code>Shop.collectionByHandle</code></a> → <a href="https://shopify.dev/docs/api/admin-graphql/2025-01/queries/collectionByHandle" target="_blank" class="body-link"><code>QueryRoot.collectionByHandle</code></a></li>
<li><a href="https://shopify.dev/docs/api/admin-graphql/2024-10/objects/Shop#connection-collectionsavedsearches" target="_blank" class="body-link"><code>Shop.collectionSavedSearches</code></a> → <a href="https://shopify.dev/docs/api/admin-graphql/2025-01/queries/collectionSavedSearches" target="_blank" class="body-link"><code>QueryRoot.collectionSavedSearches</code></a></li>
<li><a href="https://shopify.dev/docs/api/admin-graphql/2024-10/objects/Shop#connection-customersavedsearches" target="_blank" class="body-link"><code>Shop.customerSavedSearches</code></a> → <a href="https://shopify.dev/docs/api/admin-graphql/2025-01/queries/customerSavedSearches" target="_blank" class="body-link"><code>QueryRoot.customerSavedSearches</code></a></li>
<li><a href="https://shopify.dev/docs/api/admin-graphql/2024-10/objects/Shop#connection-draftordersavedsearches" target="_blank" class="body-link"><code>Shop.draftOrderSavedSearches</code></a> → <a href="https://shopify.dev/docs/api/admin-graphql/2025-01/queries/draftOrderSavedSearches" target="_blank" class="body-link"><code>QueryRoot.draftOrderSavedSearches</code></a></li>
<li><a href="https://shopify.dev/docs/api/admin-graphql/2024-10/objects/Shop#connection-marketingevents" target="_blank" class="body-link"><code>Shop.marketingEvents</code></a> → <a href="https://shopify.dev/docs/api/admin-graphql/2025-01/queries/marketingEvents" target="_blank" class="body-link"><code>QueryRoot.marketingEvents</code></a></li>
<li><a href="https://shopify.dev/docs/api/admin-graphql/2024-10/objects/Shop#connection-ordersavedsearches" target="_blank" class="body-link"><code>Shop.orderSavedSearches</code></a> → <a href="https://shopify.dev/docs/api/admin-graphql/2025-01/queries/orderSavedSearches" target="_blank" class="body-link"><code>QueryRoot.orderSavedSearches</code></a></li>
<li><a href="https://shopify.dev/docs/api/admin-graphql/2024-10/objects/Shop#field-productbyhandle" target="_blank" class="body-link"><code>Shop.productByHandle</code></a> → <a href="https://shopify.dev/docs/api/admin-graphql/2025-01/queries/productByHandle" target="_blank" class="body-link"><code>QueryRoot.productByHandle</code></a></li>
<li><a href="https://shopify.dev/docs/api/admin-graphql/2024-10/objects/Shop#connection-productsavedsearches" target="_blank" class="body-link"><code>Shop.productSavedSearches</code></a> → <a href="https://shopify.dev/docs/api/admin-graphql/2025-01/queries/productSavedSearches" target="_blank" class="body-link"><code>QueryRoot.productSavedSearches</code></a></li>
</ul>
</div> ]]></description>
    <pubDate>Wed, 18 Dec 2024 15:00:00 +0000</pubDate>
    <atom:published>2024-12-18T15:00:00.000Z</atom:published>
    <atom:updated>2024-12-18T16:03:43.000Z</atom:updated>
    <category>API</category>
    <category>Breaking API Change</category>
    <category>Admin GraphQL API</category>
    <category>2025-01</category>
    <link>https://shopify.dev/changelog/removal-of-unused-deprecated-fields</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/removal-of-unused-deprecated-fields</guid>
  </item>
  <item>
    <title>Improved `productTags`, `productVendors`, `productTypes`</title>
    <description><![CDATA[ <div class=""><p>As of Admin GraphQL API <code>2025-01</code>, <a href="https://shopify.dev/docs/api/admin-graphql/2025-01/queries/productTags" target="_blank" class="body-link"><code>productTags</code></a>, <a href="https://shopify.dev/docs/api/admin-graphql/2025-01/queries/productTypes" target="_blank" class="body-link"><code>productTypes</code></a>, <a href="https://shopify.dev/docs/api/admin-graphql/2025-01/queries/productVendors" target="_blank" class="body-link"><code>productVendors</code></a> are available on <code>QueryRoot</code>. These are paginated lists of tags/types/vendors that have been added to products. Additionally, these can return more than <code>250</code> results at once.</p>
<p>These fields were previously on the <a href="https://shopify.dev/docs/api/admin-graphql/2024-10/objects/Shop" target="_blank" class="body-link"><code>Shop</code></a> type, but did not support pagination and were capped at <code>250</code> results.</p>
</div> ]]></description>
    <pubDate>Tue, 17 Dec 2024 18:00:00 +0000</pubDate>
    <atom:published>2024-12-17T18:00:00.000Z</atom:published>
    <atom:updated>2024-12-17T18:00:00.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <category>Admin GraphQL API</category>
    <category>2025-01</category>
    <link>https://shopify.dev/changelog/improved-producttags-productvendors-producttypes</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/improved-producttags-productvendors-producttypes</guid>
  </item>
  <item>
    <title>Print API will be available for POS Extensions</title>
    <description><![CDATA[ <div class=""><p>As of January 20, 2025, we will release the <a href="https://shopify.dev/docs/api/pos-ui-extensions/2025-01/apis/print-api" target="_blank" class="body-link">Print API</a> for Point of Sale UI Extensions. </p>
<p>The Print API enables document printing functionality in your Point of Sale (POS) extension. Use this API to trigger the native print dialog so that retail merchants can generate and preview documents before printing.</p>
</div> ]]></description>
    <pubDate>Tue, 17 Dec 2024 17:00:00 +0000</pubDate>
    <atom:published>2024-12-17T17:00:00.000Z</atom:published>
    <atom:updated>2025-04-22T13:14:21.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <category>POS Extensions</category>
    <category>2025-01</category>
    <link>https://shopify.dev/changelog/print-api-will-be-available-for-pos-extensions</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/print-api-will-be-available-for-pos-extensions</guid>
  </item>
  <item>
    <title>Session tokens and app listings automatically checked before submitting for app review</title>
    <description><![CDATA[ <div class=""><p>Starting January 6, 2025, we are introducing additional preliminary steps in the app review process. These steps will provide immediate compliance feedback on draft apps before they are submitted for review:</p>
<p><strong>Session tokens for embedded apps:</strong> To be eligible for submission, embedded apps must use session tokens for user authentication. <a href="https://shopify.dev/docs/apps/build/authentication-authorization/session-tokens/set-up-session-tokens" target="_blank" class="body-link">Learn how to set up session tokens</a>.</p>
<p><strong>App listing reviews:</strong> We are implementing AI-enabled reviews for certain requirements in English app listings and screenshots. The AI will assess the following guidelines, while all other <a href="https://shopify.dev/docs/apps/launch/app-requirements-checklist#a-general-screenshot-guidelines" target="_blank" class="body-link">requirements</a> will be manually reviewed:</p>
<ul>
<li>Do not misuse the App card subtitle.</li>
<li>Do not include reviews or testimonials.</li>
<li>Do not use pricing information outside designated areas.</li>
<li>Do not display statistics or data.</li>
<li>Do not include links or URLs.</li>
<li>Avoid using a generic app name.</li>
<li>Some screenshot requirements: remove reviews and testimonials, remove statistics and data.</li>
</ul>
<p>While flagged issues with app listing requirements will not block submission, addressing them can help prevent delays.</p>
</div> ]]></description>
    <pubDate>Tue, 17 Dec 2024 13:00:00 +0000</pubDate>
    <atom:published>2024-12-17T13:00:00.000Z</atom:published>
    <atom:updated>2024-12-19T21:59:26.000Z</atom:updated>
    <category>Action Required</category>
    <category>App store</category>
    <category>New</category>
    <link>https://shopify.dev/changelog/session-tokens-and-app-listings-automatically-checked-before-submitting-for-app-review</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/session-tokens-and-app-listings-automatically-checked-before-submitting-for-app-review</guid>
  </item>
  <item>
    <title>Merchants on paid trial plans no longer able to leave reviews on Shopify's App Store</title>
    <description><![CDATA[ <div class=""><p>As of December 11, 2024, merchants on any type of trial plan (including paid trials) will not be eligible to leave a review on Shopify's App Store.</p>
<p>Learn more about <a href="https://help.shopify.com/en/partners/faq/reviews" target="_blank" class="body-link">Shopify's policy on reviews</a>.</p>
</div> ]]></description>
    <pubDate>Mon, 16 Dec 2024 16:00:00 +0000</pubDate>
    <atom:published>2024-12-16T16:00:00.000Z</atom:published>
    <atom:updated>2024-12-16T16:11:22.000Z</atom:updated>
    <category>App store</category>
    <category>Update</category>
    <link>https://shopify.dev/changelog/merchant-eligibility-to-leave-reviews-on-shopifys-app-store</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/merchant-eligibility-to-leave-reviews-on-shopifys-app-store</guid>
  </item>
  <item>
    <title>New inventoryPolicy argument for billing mutations </title>
    <description><![CDATA[ <div class=""><p>As of 2025-01, we’ve introduced an optional ‘inventoryPolicy’ argument for mutations that create billing attempts. This feature allows developers to override a merchant's inventory settings during the billing process. Regardless of whether a merchant's settings permit or restrict overselling, you can now specify your preferred inventory policy when initiating billing attempts. This flexibility ensures that your billing processes align with your specific inventory management needs.</p>
<p>The ‘inventoryPolicy’ argument can be used with the following billing attempt mutations:</p>
<ul>
<li><a href="https://shopify.dev/docs/api/admin-graphql/2025-01/mutations/subscriptionBillingAttemptCreate" target="_blank" class="body-link">subscriptionBillingAttemptCreate</a></li>
<li><a href="https://shopify.dev/docs/api/admin-graphql/2025-01/mutations/subscriptionBillingCycleCharge" target="_blank" class="body-link">subscriptionBillingCycleCharge</a></li>
<li><a href="https://shopify.dev/docs/api/admin-graphql/2025-01/mutations/subscriptionBillingCycleBulkCharge" target="_blank" class="body-link">subscriptionBillingCycleBulkCharge</a>.</li>
</ul>
<p>For more detailed information on how to implement the inventoryPolicy argument, visit the <a href="https://shopify.dev/docs/api/admin-graphql/unstable/enums/SubscriptionBillingAttemptInventoryPolicy" target="_blank" class="body-link">Shopify.dev documentation</a>.</p>
</div> ]]></description>
    <pubDate>Mon, 16 Dec 2024 15:00:00 +0000</pubDate>
    <atom:published>2024-12-16T15:00:00.000Z</atom:published>
    <atom:updated>2025-01-22T15:57:52.000Z</atom:updated>
    <category>API</category>
    <category>Update</category>
    <category>Admin GraphQL API</category>
    <category>2025-01</category>
    <link>https://shopify.dev/changelog/inventorypolicy-argument-now-available-on-billing-attempts</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/inventorypolicy-argument-now-available-on-billing-attempts</guid>
  </item>
  <item>
    <title>New `LocalizationExtensionKeys` value for Mexico</title>
    <description><![CDATA[ <div class=""><p>As of version <code>2025-01</code> of the Admin GraphQL API, we're adding a new LocalizationExtensionsKey value to support the collection shipping credentials for cross-border shipments into Mexico: <code>SHIPPING_CREDENTIAL_MX</code>.</p>
<p>Learn more about <code>LocalizationExtensionKeys</code> on <a href="https://shopify.dev/docs/api/admin-graphql/latest/enums/LocalizationExtensionKey" target="_blank" class="body-link">Shopify.dev</a>.</p>
</div> ]]></description>
    <pubDate>Mon, 16 Dec 2024 15:00:00 +0000</pubDate>
    <atom:published>2024-12-16T15:00:00.000Z</atom:published>
    <atom:updated>2024-12-16T15:00:00.000Z</atom:updated>
    <category>API</category>
    <category>Update</category>
    <category>Admin GraphQL API</category>
    <category>2025-01</category>
    <link>https://shopify.dev/changelog/new-localizationextensionkeys-value-for-mexico</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/new-localizationextensionkeys-value-for-mexico</guid>
  </item>
  <item>
    <title>New revocation reasons for payment methods for 2025-01</title>
    <description><![CDATA[ <div class=""><p>As of GraphQL Admin API version 2025-01, we've added new values to the <code>CustomerPaymentMethodRevocationReason</code> enum to provide more granular information about payment method revocations. This enhancement helps apps better understand and handle scenarios where a customer's payment method needs to be revoked.</p>
<p>No action is required for existing implementations, as this is a non-breaking change that adds new enum values.</p>
<p>Learn more about payment method revocation on <a href="https://shopify.dev/api/admin-graphql/current/enums/CustomerPaymentMethodRevocationReason" target="_blank" class="body-link">Shopify.dev</a>.</p>
</div> ]]></description>
    <pubDate>Mon, 16 Dec 2024 14:36:00 +0000</pubDate>
    <atom:published>2024-12-16T14:36:00.000Z</atom:published>
    <atom:updated>2024-12-16T14:36:00.000Z</atom:updated>
    <category>API</category>
    <category>Update</category>
    <category>Admin GraphQL API</category>
    <category>2025-01</category>
    <link>https://shopify.dev/changelog/new-revocation-reasons-for-payment-methods-for-2025-01</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/new-revocation-reasons-for-payment-methods-for-2025-01</guid>
  </item>
  <item>
    <title>Search discountNodes by exact discount code in the GraphQL Admin API</title>
    <description><![CDATA[ <div class=""><p>As of API <code>2025-01</code>, you can use discountsNodes() to search for exact discount codes with the <code>code</code> prefix in the query argument. </p>
<p>This update allows developers to search for exact first-party and third-party discount codes through the GraphQL Admin API, offering more flexibility and precision in finding the right discounts for merchants. </p>
<p>Learn more about <a href="https://shopify.dev/docs/api/admin-graphql/2024-10/queries/discountNodes" target="_blank" class="body-link">discountNodes here</a>. </p>
</div> ]]></description>
    <pubDate>Mon, 16 Dec 2024 05:00:00 +0000</pubDate>
    <atom:published>2024-12-16T05:00:00.000Z</atom:published>
    <atom:updated>2024-12-23T16:30:42.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <category>Admin GraphQL API</category>
    <category>2025-01</category>
    <link>https://shopify.dev/changelog/search-discountnodes-by-exact-discount-code-in-the-graphql-admin-api</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/search-discountnodes-by-exact-discount-code-in-the-graphql-admin-api</guid>
  </item>
  <item>
    <title>Changes to ScriptTag displayScope field on Admin GraphQL API</title>
    <description><![CDATA[ <div class=""><p>As of Admin GraphQL API version 2025-01, the only valid value for the <code>displayScope</code> field on the <a href="https://shopify.dev/docs/api/admin-graphql/unstable/input-objects/ScriptTagInput" target="_blank" class="body-link"><code>ScriptTagInput</code> object</a> is <code>ONLINE_STORE</code>.</p>
<p>The <code>displayScope</code> field remains optional when creating and updating Script tags. When it is omitted from the <code>scriptTagCreate</code> mutation, it will default to <code>ONLINE_STORE</code> from version 2025-01.</p>
<p>This change is related to Script tags being turned off for the Order status page on August 28, 2025, following the launch of <a href="https://shopify.dev/changelog/ui-extensions-on-the-thank-you-and-order-status-pages-have-launched" target="_blank" class="body-link">UI Extensions on the Thank You and Order status pages</a>.</p>
</div> ]]></description>
    <pubDate>Fri, 13 Dec 2024 18:30:00 +0000</pubDate>
    <atom:published>2024-12-13T18:30:00.000Z</atom:published>
    <atom:updated>2024-12-13T18:30:00.000Z</atom:updated>
    <category>Action Required</category>
    <category>API</category>
    <category>Deprecation announcement</category>
    <category>Admin GraphQL API</category>
    <category>2025-01</category>
    <link>https://shopify.dev/changelog/changes-to-scripttag-displayscope-field-on-admin-graphql-api</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/changes-to-scripttag-displayscope-field-on-admin-graphql-api</guid>
  </item>
  <item>
    <title>Hydrogen December 2024 release</title>
    <description><![CDATA[ <div class=""><p><a href="https://github.com/Shopify/hydrogen/releases/tag/%40shopify%2Fhydrogen%402024.10.1" target="_blank" class="body-link">Hydrogen v2024.10.1</a> is out today. The December 2024 Hydrogen release contains several quality-of-life improvements, optimizations and bug fixes:</p>
<ul>
<li>Support for 2,000 Variants and Combined Listings (<a href="https://github.com/Shopify/hydrogen/pull/2659" target="_blank" class="body-link">#2659</a>)</li>
<li>Optimized Product Page Performance in Skeleton Template (<a href="https://github.com/Shopify/hydrogen/pull/2643" target="_blank" class="body-link">#2643</a>)</li>
<li>Multiple <code>&lt;Pagination /&gt;</code> Components Support (<a href="https://github.com/Shopify/hydrogen/pull/2649" target="_blank" class="body-link">#2649</a>)</li>
<li>Accessibility improvements and DX polish in the Skeleton template.</li>
</ul>
<p>Check out our full <a href="https://hydrogen.shopify.dev/update/december-2024" target="_blank" class="body-link">Hydrogen December 2024 release blog post</a> for more details. And please drop your comments, feedback, and suggestions in <a href="https://github.com/Shopify/hydrogen/discussions" target="_blank" class="body-link">GitHub Discussions</a>!</p>
</div> ]]></description>
    <pubDate>Fri, 13 Dec 2024 00:00:00 +0000</pubDate>
    <atom:published>2024-12-13T00:00:00.000Z</atom:published>
    <atom:updated>2024-12-13T00:47:45.000Z</atom:updated>
    <category>Platform</category>
    <category>Update</category>
    <link>https://shopify.dev/changelog/hydrogen-december-2024-release</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/hydrogen-december-2024-release</guid>
  </item>
  <item>
    <title>Product image resource in REST now returns a media image GID to streamline migration to GraphQL </title>
    <description><![CDATA[ <div class=""><p>As of <code>2025-01</code>, the admin REST API for the <a href="https://shopify.dev/docs/api/admin-rest/2024-10/resources/product-image" target="_blank" class="body-link">product image resource</a> will return a media image GID instead of a product image GID. This is designed to help make it easier to migrate to GraphQL from REST when interfacing with product images that were created before the introduction of a unified media id. </p>
<p>Previously, the <code>admin_graphql_api_id</code> returned a product image ID: 
<code>&quot;gid://shopify/ProductImage/43701248884792&quot;</code></p>
<p>Now, the <code>admin_graphql_api_id</code> will return a media image ID: 
<code>&quot;gid://shopify/MediaImage/12379812379123&quot;</code></p>
<p>This change will only affect clients using the latest 2025-01 API version. Older versions will continue to return the ProductImage GID, ensuring backward compatibility. It's strongly recommended to upgrade to using GraphQL as REST is nearing deprecation. </p>
</div> ]]></description>
    <pubDate>Thu, 12 Dec 2024 21:55:00 +0000</pubDate>
    <atom:published>2024-12-12T21:55:00.000Z</atom:published>
    <atom:updated>2024-12-13T22:24:41.000Z</atom:updated>
    <category>Action Required</category>
    <category>API</category>
    <category>Update</category>
    <category>2025-01</category>
    <link>https://shopify.dev/changelog/product-image-resource-in-rest-now-returns-a-media-image-gid-to-streamline-migration-to-graphql</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/product-image-resource-in-rest-now-returns-a-media-image-gid-to-streamline-migration-to-graphql</guid>
  </item>
  <item>
    <title>Admin action extensions now have access to picking APIs</title>
    <description><![CDATA[ <div class=""><p><a href="https://shopify.dev/docs/apps/build/admin/actions-blocks#admin-actions" target="_blank" class="body-link">Admin action extensions</a> and <a href="https://shopify.dev/docs/apps/build/admin/actions-blocks#admin-print-actions" target="_blank" class="body-link">admin print action extensions</a> now have access to the <a href="https://shopify.dev/docs/api/admin-extensions/unstable/api/resource-picker" target="_blank" class="body-link">resource picker API</a>, allowing merchants select one or more products, collections, or product variants. Additionally they can access the <a href="https://shopify.dev/docs/api/admin-extensions/unstable/api/picker" target="_blank" class="body-link">picker API</a>, enabling selection of resources that your app defines. </p>
<p>Get started today by <a href="https://shopify.dev/docs/apps/build/admin/actions-blocks/build-admin-action?extension=react" target="_blank" class="body-link">building an admin action extension</a>!</p>
</div> ]]></description>
    <pubDate>Thu, 12 Dec 2024 19:47:00 +0000</pubDate>
    <atom:published>2024-12-12T19:47:00.000Z</atom:published>
    <atom:updated>2024-12-12T20:10:55.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <link>https://shopify.dev/changelog/admin-action-extensions-now-have-access-to-picking-apis</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/admin-action-extensions-now-have-access-to-picking-apis</guid>
  </item>
  <item>
    <title>Deprecation Notice: CalculatedOrder for committed order edits</title>
    <description><![CDATA[ <div class=""><p>We are deprecating the <a href="https://shopify.dev/docs/api/admin-graphql/unstable/objects/CalculatedOrder" target="_blank" class="body-link"><code>CalculatedOrder</code></a> object for committed order edits. There are no changes to <code>CalculatedOrder</code> for uncommitted order edits. <code>CalculatedOrders</code> are temporary objects that represent an order's state with unsaved edits. Use the <a href="https://shopify.dev/docs/api/admin-graphql/unstable/objects/Order" target="_blank" class="body-link"><code>Order</code></a> object to access the current state of an order after edits are committed. To query past changes made to an order, use <a href="https://shopify.dev/docs/api/admin-graphql/unstable/objects/Order#connection-agreements" target="_blank" class="body-link"><code>Order.agreements</code></a>.</p>
<p>As part of this change, we are also deprecating the <a href="https://shopify.dev/docs/api/admin-graphql/unstable/objects/CalculatedOrder#field-committed" target="_blank" class="body-link"><code>CalculateOrder.committed</code></a> field.</p>
<p><strong>Deprecation Schedule:</strong></p>
<ul>
<li><strong>Today:</strong> <code>CalculatedOrders</code> for committed order edits are marked as deprecated. They will no longer be returned for committed order edits in the <code>unstable</code> version and the <code>2025-04</code> release candidate.</li>
<li><strong>January 1, 2026 (version <code>2026-01</code>):</strong> <code>CalculatedOrders</code> for committed order edits will no longer be returned. Note: If usage drops to zero before <code>2026-01</code>, we may stop returning <code>CalculatedOrders</code> in an earlier version.</li>
</ul>
<p>Learn more about editing orders on <a href="https://shopify.dev/docs/apps/build/orders-fulfillment/order-management-apps/edit-orders" target="_blank" class="body-link">Shopify.dev</a>.</p>
</div> ]]></description>
    <pubDate>Thu, 12 Dec 2024 05:00:00 +0000</pubDate>
    <atom:published>2024-12-12T05:00:00.000Z</atom:published>
    <atom:updated>2024-12-16T22:49:27.000Z</atom:updated>
    <category>Action Required</category>
    <category>API</category>
    <category>Deprecation announcement</category>
    <category>Admin GraphQL API</category>
    <category>2025-04</category>
    <link>https://shopify.dev/changelog/deprecation-notice-calculatedorder-for-committed-order-edits</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/deprecation-notice-calculatedorder-for-committed-order-edits</guid>
  </item>
  <item>
    <title>&quot;Get Support&quot; buttons can now link to custom support channels</title>
    <description><![CDATA[ <div class=""><p>App developers can now configure the &quot;Get Support&quot; button to redirect merchants to your preferred support channel, such as a help desk, ticketing system, forum, or live chat.</p>
<p>Learn more about <a href="https://shopify.dev/docs/apps/launch/distribution/support-your-customers" target="_blank" class="body-link">customizing your preferred app support channel</a>.</p>
</div> ]]></description>
    <pubDate>Wed, 11 Dec 2024 20:00:00 +0000</pubDate>
    <atom:published>2024-12-11T20:00:00.000Z</atom:published>
    <atom:updated>2024-12-11T20:00:00.000Z</atom:updated>
    <category>App store</category>
    <category>New</category>
    <link>https://shopify.dev/changelog/get-support-buttons-can-now-link-to-custom-support-channels</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/get-support-buttons-can-now-link-to-custom-support-channels</guid>
  </item>
  <item>
    <title>Shopify App Store Ads now offer bid suggestions for all ad types</title>
    <description><![CDATA[ <div class=""><p>All ad types on the Shopify App Store now offer bid suggestions. In addition to search ads, you’ll now see bid suggestions when creating Homepage and Category ads. Bidding within the suggested range can increase the likelihood of your ads being displayed.</p>
<p>Learn more about <a href="https://shopify.dev/docs/apps/launch/marketing/advertising/create-ads#bidding" target="_blank" class="body-link">creating ads in the Shopify App Store</a>.</p>
</div> ]]></description>
    <pubDate>Wed, 11 Dec 2024 18:00:00 +0000</pubDate>
    <atom:published>2024-12-11T18:00:00.000Z</atom:published>
    <atom:updated>2024-12-11T18:00:00.000Z</atom:updated>
    <category>App store</category>
    <category>New</category>
    <link>https://shopify.dev/changelog/shopify-app-store-ads-now-offer-bid-suggestions-for-all-ad-types</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/shopify-app-store-ads-now-offer-bid-suggestions-for-all-ad-types</guid>
  </item>
  <item>
    <title>The Winter '25 Edition is live</title>
    <description><![CDATA[ <div class=""><p>Announcing 150+ updates to Shopify.</p>
<p><a href="https://www.shopify.com/editions/winter2025?utm_source=devchangelog&utm_medium=devchangelog&utm_campaign=winter25edition" target="_blank" class="body-link">See the updates</a></p>
</div> ]]></description>
    <pubDate>Wed, 11 Dec 2024 14:30:00 +0000</pubDate>
    <atom:published>2024-12-11T14:30:00.000Z</atom:published>
    <atom:updated>2024-12-11T14:30:00.000Z</atom:updated>
    <category>Platform</category>
    <category>Update</category>
    <link>https://shopify.dev/changelog/the-winter-25-edition-is-live</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/the-winter-25-edition-is-live</guid>
  </item>
  <item>
    <title>New customer accounts name change</title>
    <description><![CDATA[ <div class=""><p>Changes are coming to how we refer to customer accounts when extensions launch on Dec 11:</p>
<p><strong>New customer accounts</strong> will become <strong>customer accounts</strong></p>
<p><strong>Classic customer accounts</strong> will become <strong>legacy customer accounts</strong></p>
<p>This change will take place across all Shopify-owned surfaces, including the Shopify admin, help docs, and dev docs.</p>
<p><strong>Recommended action</strong></p>
<p>As part of this change, we recommend that you make the relevant updates to any references to new and classic customer accounts in your product and documentation. </p>
<p><strong>There will be no breaking changes to APIs or your products as part of this update.</strong></p>
<p>This change reflects the fact that new customer accounts are the future and although we have not yet announced a timeline, classic customer accounts will eventually be retired.</p>
</div> ]]></description>
    <pubDate>Wed, 11 Dec 2024 14:30:00 +0000</pubDate>
    <atom:published>2024-12-11T14:30:00.000Z</atom:published>
    <atom:updated>2024-12-11T14:30:00.000Z</atom:updated>
    <category>App store</category>
    <category>Update</category>
    <link>https://shopify.dev/changelog/new-customer-accounts-name-change</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/new-customer-accounts-name-change</guid>
  </item>
  <item>
    <title>Updated Built for Shopify requirement for fulfillment services callback response rate</title>
    <description><![CDATA[ <div class=""><p>Built for Shopify requirements about <a href="https://shopify.dev/docs/apps/launch/built-for-shopify/requirements#respond-to-callback-requests" target="_blank" class="body-link">responding to callback requests</a> for fulfillment services apps are changing. The threshold for responding to Shopify <a href="https://shopify.dev/docs/api/admin-graphql/latest/objects/FulfillmentService" target="_blank" class="body-link">callback requests</a> in the previous 28-day window is changing from 99% to 100%. The updated requirement comes into effect in July 2025.</p>
</div> ]]></description>
    <pubDate>Wed, 11 Dec 2024 14:11:00 +0000</pubDate>
    <atom:published>2024-12-11T14:11:00.000Z</atom:published>
    <atom:updated>2024-12-16T15:22:43.000Z</atom:updated>
    <category>Built for Shopify</category>
    <category>Update</category>
    <link>https://shopify.dev/changelog/requirement-update-fulfillment-services-respond-to-callback-requests</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/requirement-update-fulfillment-services-respond-to-callback-requests</guid>
  </item>
  <item>
    <title>Introducing the Shopify Subscriptions Reference app </title>
    <description><![CDATA[ <div class=""><p>We just launched the<a href="https://shopify.dev/docs/apps/build/purchase-options/subscriptions/subscriptions-app" target="_blank" class="body-link"> Shopify Subscriptions Reference app</a>, the source code from the Shopify Subscriptions app, which serves as a starting point or example app for merchants and partners looking to build subscription applications. </p>
<p>The reference app can help accelerate app development, provides insight into the Selling Plan APIs and highlights Shopify’s best practices in app development. </p>
<p>Learn more about the Shopify Subscriptions Reference app <a href="https://github.com/Shopify/subscriptions-reference-app" target="_blank" class="body-link">here</a>. </p>
</div> ]]></description>
    <pubDate>Wed, 11 Dec 2024 13:35:00 +0000</pubDate>
    <atom:published>2024-12-11T13:35:00.000Z</atom:published>
    <atom:updated>2024-12-11T13:35:00.000Z</atom:updated>
    <category>Tools</category>
    <category>New</category>
    <link>https://shopify.dev/changelog/introducing-the-shopify-subscriptions-reference-app</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/introducing-the-shopify-subscriptions-reference-app</guid>
  </item>
  <item>
    <title>New: Purchase Options UI extensions for subscriptions, pre-orders, and try-before-you-buy apps </title>
    <description><![CDATA[ <div class=""><p>Developers can now build a single extension using the <a href="https://shopify.dev/docs/apps/build/purchase-options/purchase-options-extensions" target="_blank" class="body-link">Purchase Options UI extensions</a> so merchants can more easily create and manage subscriptions, pre-orders, and try-before-you-buy. </p>
<p>To learn more, please visit the developer documentation <a href="https://shopify.dev/docs/apps/build/purchase-options/purchase-options-extensions/start-building" target="_blank" class="body-link">here</a>. </p>
</div> ]]></description>
    <pubDate>Wed, 11 Dec 2024 13:20:00 +0000</pubDate>
    <atom:published>2024-12-11T13:20:00.000Z</atom:published>
    <atom:updated>2024-12-11T13:20:00.000Z</atom:updated>
    <category>App store</category>
    <category>Update</category>
    <link>https://shopify.dev/changelog/new-purchase-options-ui-extensions-for-subscriptions-pre-orders-and-try-before-you-buy-apps</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/new-purchase-options-ui-extensions-for-subscriptions-pre-orders-and-try-before-you-buy-apps</guid>
  </item>
  <item>
    <title>Returns apps can now integrate with Shopify Collective</title>
    <description><![CDATA[ <div class=""><p>As of Dec 10, Shopify Collective introduces automated returns between retailers and suppliers, enhancing return management for businesses at scale. You can now make your returns app compatible with this new automation flow. By using the <code>returns/close</code> webhook as a trigger to indicate that a return has been inspected, you can seamlessly process refunds and reduce the manual effort required for merchants utilizing Shopify Collective.</p>
<p>For detailed guidance on how to implement this feature, please refer to our <a href="https://shopify.dev/docs/apps/build/collective/returns" target="_blank" class="body-link">developer documentation</a>. </p>
</div> ]]></description>
    <pubDate>Wed, 11 Dec 2024 13:00:00 +0000</pubDate>
    <atom:published>2024-12-11T13:00:00.000Z</atom:published>
    <atom:updated>2025-01-07T12:49:03.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <link>https://shopify.dev/changelog/returns-apps-can-now-integrate-with-shopify-collective</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/returns-apps-can-now-integrate-with-shopify-collective</guid>
  </item>
  <item>
    <title>Returns now supported in Customer Accounts API</title>
    <description><![CDATA[ <div class=""><p>Returns are now supported directly through the <a href="https://shopify.dev/docs/api/customer" target="_blank" class="body-link">Customer Accounts API</a>. This includes new fields and a mutation that allow for querying return-related information and self-serve return requests. </p>
<p>This update allows partners to seamlessly build return apps on new customer accounts without needing extra app authorizations. Partners can query returns, create new return requests, and customize the return experience for customers. Additionally, these APIs provide partners with visibility into an order line item's return eligibility, which incorporates Shopify's <a href="https://help.shopify.com/en/manual/fulfillment/managing-orders/returns/return-rules" target="_blank" class="body-link">return rules</a> for merchants with this feature enabled. Partners can determine which items can be returned and the expected refund amount, as well as why items are not returnable. </p>
<h4>New APIs:</h4>
<p><strong><a href="https://shopify.dev/docs/api/customer/unstable/mutations/orderRequestReturn" target="_blank" class="body-link">orderRequestReturn</a>:</strong> Mutation that enables the initiation of a return request directly via API. This mutation supports creating a return request on behalf of a customer, allowing the merchant to use the existing return flows within the Admin.</p>
<p><strong><a href="https://shopify.dev/docs/api/customer/unstable/queries/returnCalculate" target="_blank" class="body-link">returnCalculate</a>:</strong> Query that calculates the potential refund amount based on customer inputs if a return request is approved.</p>
<p><strong><a href="https://shopify.dev/docs/api/customer/unstable/objects/OrderReturnInformation" target="_blank" class="body-link">ReturnInformation</a>:</strong> Object that provides details about which items in an order are eligible or ineligible for a return.</p>
<p><strong><a href="https://shopify.dev/docs/api/customer/unstable/connections/ReturnConnection" target="_blank" class="body-link">ReturnConnection</a>:</strong> Connection on Order that lists returns associated with an order which includes information such as the return's status or associated reverse deliveries.</p>
<p>For the full set of APIs shipped, please refer to the documentation on <a href="https://shopify.dev/docs/api/customer/unstable/objects/Order" target="_blank" class="body-link">Shopify.dev</a>.</p>
</div> ]]></description>
    <pubDate>Wed, 11 Dec 2024 13:00:00 +0000</pubDate>
    <atom:published>2024-12-11T13:00:00.000Z</atom:published>
    <atom:updated>2024-12-11T14:31:29.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <category>Customer Account API</category>
    <category>2025-01</category>
    <link>https://shopify.dev/changelog/returns-now-supported-in-customer-accounts-api</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/returns-now-supported-in-customer-accounts-api</guid>
  </item>
  <item>
    <title>Using custom ids and handles in product and customer lookups</title>
    <description><![CDATA[ <div class=""><p>As of <code>2025-01</code> Admin API, you can use your own identifiers to lookup Products and Customers with the following APIs:</p>
<ul>
<li><code>customerByIdentifier</code></li>
<li><code>productByIdentifier</code></li>
</ul>
<p>Custom ids are defined by a new metafield type: <code>id</code>. The <a href="https://shopify.dev/changelog/adding-unique-values-to-metafields" target="_blank" class="body-link">unique values capability</a> is required and enabled by default for the id type. The id type unlocks custom ids for Shopify, enabling merchants and partners to specify their own identifiers for objects with metafields.</p>
</div> ]]></description>
    <pubDate>Wed, 11 Dec 2024 13:00:00 +0000</pubDate>
    <atom:published>2024-12-11T13:00:00.000Z</atom:published>
    <atom:updated>2024-12-12T14:35:11.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <category>Admin GraphQL API</category>
    <category>2025-01</category>
    <link>https://shopify.dev/changelog/using-custom-ids-and-handles-in-product-and-customer-lookups</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/using-custom-ids-and-handles-in-product-and-customer-lookups</guid>
  </item>
  <item>
    <title>Adding unique values to metafields</title>
    <description><![CDATA[ <div class=""><p>As of <code>2025-01</code> Admin API, you can now make metafield definitions that enforce uniqueness.</p>
<p>The new <code>uniqueValues</code> capability ensures that each metafield has a unique value across all resources. This is available for <code>single_line_text_field</code>, <code>number_integer</code>, <code>url</code>, and <a href="https://shopify.dev/changelog/using-custom-ids-and-handles-in-product-and-customer-lookups" target="_blank" class="body-link"><code>id</code></a>. For now, this capability can only be set on metafield definitions that don’t yet have associated metafields.</p>
</div> ]]></description>
    <pubDate>Wed, 11 Dec 2024 13:00:00 +0000</pubDate>
    <atom:published>2024-12-11T13:00:00.000Z</atom:published>
    <atom:updated>2024-12-12T14:35:08.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <category>Admin GraphQL API</category>
    <category>2025-01</category>
    <link>https://shopify.dev/changelog/adding-unique-values-to-metafields</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/adding-unique-values-to-metafields</guid>
  </item>
  <item>
    <title>Apps can now manage access settings for merchant metafield definitions</title>
    <description><![CDATA[ <div class=""><p>Effective immediately, apps can manage the <code>storefront</code> and <code>customerAccount</code> access settings for metafield definitions in the merchant namespace. The only acceptable value for <code>admin</code> access remains <code>PUBLIC_READ_WRITE</code> for non app-reserved definitions. </p>
<p>Learn more about access controls for metafields on <a href="https://shopify.dev/docs/apps/custom-data/metafields/definitions/access-controls" target="_blank" class="body-link">Shopify.dev</a>.</p>
</div> ]]></description>
    <pubDate>Wed, 11 Dec 2024 13:00:00 +0000</pubDate>
    <atom:published>2024-12-11T13:00:00.000Z</atom:published>
    <atom:updated>2024-12-11T13:00:00.000Z</atom:updated>
    <category>API</category>
    <category>Update</category>
    <category>Admin GraphQL API</category>
    <link>https://shopify.dev/changelog/apps-can-now-manage-access-settings-for-merchant-metafield-definitions</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/apps-can-now-manage-access-settings-for-merchant-metafield-definitions</guid>
  </item>
  <item>
    <title>Support for additional Shopify Functions APIs in draft orders</title>
    <description><![CDATA[ <div class=""><p>Draft orders previously supported most Shopify Functions, but now offer full support of the remaining APIs:</p>
<p><strong>Delivery Customization API:</strong> Runs in draft orders checkout.</p>
<p><strong>Payment Customization API:</strong> Runs in draft orders checkout.</p>
<p><strong>Cart and Checkout Validation API:</strong> Runs in draft orders admin and checkout. Additionally, we have added a new argument named <strong>bypassCartValidations</strong> that you can pass in the <strong><a href="https://shopify.dev/docs/api/admin-graphql/unstable/mutations/draftOrderComplete#argument-bypasscartvalidations" target="_blank" class="body-link">draftOrderComplete</a></strong> and <strong><a href="https://shopify.dev/docs/api/admin-graphql/unstable/mutations/prepareForBuyerCheckout#argument-bypasscartvalidations" target="_blank" class="body-link">prepareForBuyerCheckout</a></strong> mutations in order to bypass checkout rules when completing or sharing a draft order.</p>
<p>This feature is enabled on all development stores and production stores. These enhancements streamline the draft order process, reducing errors and improving the overall experience for both merchants and their customers. Whether creating a draft order in the admin or sending an invoice for customer completion, merchants can rely on the same robust Shopify Function support available in standard checkouts.</p>
<p>Learn more about Shopify Functions in our <a href="https://shopify.dev/docs/apps/build/functions" target="_blank" class="body-link">developer documentation</a>.</p>
</div> ]]></description>
    <pubDate>Wed, 11 Dec 2024 13:00:00 +0000</pubDate>
    <atom:published>2024-12-11T13:00:00.000Z</atom:published>
    <atom:updated>2025-01-10T16:35:54.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <category>Admin GraphQL API</category>
    <link>https://shopify.dev/changelog/support-for-additional-shopify-functions-apis-in-draft-orders</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/support-for-additional-shopify-functions-apis-in-draft-orders</guid>
  </item>
  <item>
    <title>Shopify Functions input size limit increased to 128kB</title>
    <description><![CDATA[ <div class=""><p>Shopify Functions input size limit has been increased from 64kB to 128kB. This will enable developers to support a larger number of cart lines.</p>
<p>Learn more about resource limits and how they're calculated for Shopify Functions on <a href="https://shopify.dev/docs/api/functions#resource-limits" target="_blank" class="body-link">Shopify.dev</a>.</p>
</div> ]]></description>
    <pubDate>Wed, 11 Dec 2024 13:00:00 +0000</pubDate>
    <atom:published>2024-12-11T13:00:00.000Z</atom:published>
    <atom:updated>2024-12-11T13:00:00.000Z</atom:updated>
    <category>Platform</category>
    <category>Update</category>
    <link>https://shopify.dev/changelog/shopify-functions-input-size-limit-increased-to-128kb</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/shopify-functions-input-size-limit-increased-to-128kb</guid>
  </item>
  <item>
    <title>Improved billing attempt error handling for subscriptions in Selling Plan API</title>
    <description><![CDATA[ <div class=""><p>Following the <a href="https://shopify.dev/changelog/subscription-billing-attempt-now-respects-inventory-policy-to-not-allow-overselling" target="_blank" class="body-link">release</a> of subscription billing attempt respecting merchant’s inventory policy to prevent overselling, we added new features to assist developers in managing billing errors. </p>
<p>As of 2025-01, when accessing billing error details during billing attempts, you can now leverage <a href="https://shopify.dev/docs/api/admin-graphql/2025-01/objects/SubscriptionBillingAttempt#field-processingerror" target="_blank" class="body-link">processingError</a> to identify specific product variants responsible for inventory errors. This update provides better insight into failed billing attempts related to inventory issues by integrating location-specific inventory data directly within the error diagnostics. </p>
<p>Learn more about the <a href="https://shopify.dev/docs/api/admin-graphql/unstable/mutations/subscriptionBillingAttemptCreate#top" target="_blank" class="body-link">Selling Plan API inventory policy</a>.</p>
</div> ]]></description>
    <pubDate>Wed, 11 Dec 2024 13:00:00 +0000</pubDate>
    <atom:published>2024-12-11T13:00:00.000Z</atom:published>
    <atom:updated>2024-12-11T13:00:00.000Z</atom:updated>
    <category>API</category>
    <category>Update</category>
    <category>Admin GraphQL API</category>
    <category>2025-01</category>
    <link>https://shopify.dev/changelog/improved-billing-attempt-error-handling-for-subscriptions-in-selling-plan-api</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/improved-billing-attempt-error-handling-for-subscriptions-in-selling-plan-api</guid>
  </item>
  <item>
    <title>Updated category specific requirements for Built for Shopify </title>
    <description><![CDATA[ <div class=""><p>Built for Shopify now includes new <a href="https://shopify.dev/docs/apps/launch/built-for-shopify/requirements#category-specific" target="_blank" class="body-link">category-specific requirements</a> for Email marketing apps, SMS marketing apps, Ads apps, Analytics apps, Affiliate program apps, and Forms apps. Additionally, the requirements for Subscriptions apps have been updated to require the use of customer account extensions. </p>
<p>Starting in July 2025, apps will need to meet these requirements to be eligible for Built for Shopify status.</p>
</div> ]]></description>
    <pubDate>Wed, 11 Dec 2024 12:30:00 +0000</pubDate>
    <atom:published>2024-12-11T12:30:00.000Z</atom:published>
    <atom:updated>2024-12-11T12:30:00.000Z</atom:updated>
    <category>Built for Shopify</category>
    <category>New</category>
    <link>https://shopify.dev/changelog/updated-category-specific-requirements-for-built-for-shopify</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/updated-category-specific-requirements-for-built-for-shopify</guid>
  </item>
  <item>
    <title>Latest version of App Bridge required for Built for Shopify</title>
    <description><![CDATA[ <div class=""><p>All Built for Shopify apps must use the latest version of App Bridge. <a href="https://shopify.dev/docs/api/app-bridge-library#getting-started" target="_blank" class="body-link"> Update to the latest App Bridge</a> by adding the <code>app-bridge.js</code> script tag to the <code>&lt;head&gt;</code> of every document of your app to meet this requirement. </p>
<p>Starting in July 2025, apps will need to meet this requirement to be eligible for Built for Shopify status.</p>
</div> ]]></description>
    <pubDate>Wed, 11 Dec 2024 12:30:00 +0000</pubDate>
    <atom:published>2024-12-11T12:30:00.000Z</atom:published>
    <atom:updated>2024-12-19T17:39:53.000Z</atom:updated>
    <category>Built for Shopify</category>
    <category>New</category>
    <link>https://shopify.dev/changelog/latest-version-of-app-bridge-required-for-built-for-shopify</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/latest-version-of-app-bridge-required-for-built-for-shopify</guid>
  </item>
  <item>
    <title>Set custom prices in draft orders</title>
    <description><![CDATA[ <div class=""><p>As of 2025-01, item prices on a draft order will automatically reflect the most current product price at checkout. Additionally, you can now set custom prices on draft order line items. When set, the prices will be locked and used as the basis for all further calculations, including taxes, discounts, order totals, etc.</p>
<p>You can set the custom price on a line item using <strong>draftOrderCreate</strong>, <strong>draftOrderUpdate</strong>, and <strong>draftOrderCalculate</strong> by specifying <strong><a href="https://shopify.dev/docs/api/admin-graphql/2025-01/input-objects/DraftOrderLineItemInput#field-priceoverride" target="_blank" class="body-link">lineItem.priceOverride</a></strong> in the GraphQL Admin API.</p>
</div> ]]></description>
    <pubDate>Wed, 11 Dec 2024 12:30:00 +0000</pubDate>
    <atom:published>2024-12-11T12:30:00.000Z</atom:published>
    <atom:updated>2024-12-11T12:30:00.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <category>Admin GraphQL API</category>
    <category>2025-01</category>
    <link>https://shopify.dev/changelog/set-custom-prices-in-draft-orders</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/set-custom-prices-in-draft-orders</guid>
  </item>
  <item>
    <title>Picker API added to the latest version of App Bridge and Admin UI extensions</title>
    <description><![CDATA[ <div class=""><p>With the latest version of App Bridge and Admin UI extensions, you can use the <code>picker</code> API to open a search-based interface to help users find and select one or more resources that you provide, such as product reviews, email templates, or subscription options. Learn more about it in the <a href="https://shopify.dev/docs/api/app-bridge-library/apis/picker" target="_blank" class="body-link">App Bridge documentation</a> and <a href="https://shopify.dev/docs/api/admin-extensions/unstable/api/picker" target="_blank" class="body-link">UI Extensions documentation</a>.</p>
</div> ]]></description>
    <pubDate>Wed, 11 Dec 2024 12:30:00 +0000</pubDate>
    <atom:published>2024-12-11T12:30:00.000Z</atom:published>
    <atom:updated>2024-12-11T12:30:00.000Z</atom:updated>
    <category>Tools</category>
    <category>New</category>
    <link>https://shopify.dev/changelog/picker-api-added-to-the-latest-version-of-app-bridge-and-admin-ui-extensions</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/picker-api-added-to-the-latest-version-of-app-bridge-and-admin-ui-extensions</guid>
  </item>
  <item>
    <title>Built for Shopify Requirements for embedded apps and apps in marketing categories</title>
    <description><![CDATA[ <div class=""><p>Apps must meet the following criteria to achieve or maintain Built for Shopify status by the specified effective dates:</p>
<p><strong>New design requirements – Effective January 1, 2025</strong>
We’re introducing new <a href="https://shopify.dev/docs/apps/launch/built-for-shopify/requirements#design" target="_blank" class="body-link">design requirements</a> including:</p>
<ul>
<li>Using tabs for secondary navigation</li>
<li>Following UX best practices</li>
</ul>
<p><strong>New category-specific requirements – Effective July 1, 2025</strong>
We’re expanding requirements across <a href="https://shopify.dev/docs/apps/launch/built-for-shopify/category-achievement-criteria" target="_blank" class="body-link">more categories</a> and updating criteria for Subscription apps:</p>
<ul>
<li>Ads</li>
<li>Affiliate programs</li>
<li>Analytics</li>
<li>Email marketing</li>
<li>Forms</li>
<li>SMS marketing</li>
<li>Subscriptions (updated criteria)</li>
</ul>
<p><strong>Use the latest version of Shopify App Bridge – Effective July 1, 2025</strong>
Apps must be embedded in the Shopify admin using the <a href="https://shopify.dev/docs/api/app-bridge-library#getting-started" target="_blank" class="body-link">latest version of Shopify App Bridge</a>.</p>
<p>Apps that fail to meet these requirements by their deadlines will be at risk of <a href="https://shopify.dev/docs/apps/launch/built-for-shopify/regain-lost-status" target="_blank" class="body-link">losing status</a>.</p>
</div> ]]></description>
    <pubDate>Wed, 11 Dec 2024 12:13:00 +0000</pubDate>
    <atom:published>2024-12-11T12:13:00.000Z</atom:published>
    <atom:updated>2025-02-24T19:03:40.000Z</atom:updated>
    <category>Action Required</category>
    <category>Built for Shopify</category>
    <category>Update</category>
    <link>https://shopify.dev/changelog/built-for-shopify-requirements-for-embedded-apps-and-apps-in-marketing-categories-effective-july-2025</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/built-for-shopify-requirements-for-embedded-apps-and-apps-in-marketing-categories-effective-july-2025</guid>
  </item>
  <item>
    <title>Admin link extensions have been migrated to the Shopify CLI</title>
    <description><![CDATA[ <div class=""><p>Apps can now create and migrate to admin link extensions, which replace both admin links and bulk action links, which were previously created from the Extensions section of your app's Partners Dashboard. </p>
<p>Admin link extensions let you access the same functionality as admin links and bulk action links, but also let you localize links for users, manage links in your app's source control system, and manage their deployment with the Shopify CLI. To upgrade to admin link extensions, <a href="https://shopify.dev/docs/apps/build/admin/admin-links/migrate-admin-links" target="_blank" class="body-link">follow the tutorial</a> on shopify.dev.</p>
</div> ]]></description>
    <pubDate>Wed, 11 Dec 2024 12:00:00 +0000</pubDate>
    <atom:published>2024-12-11T12:00:00.000Z</atom:published>
    <atom:updated>2024-12-11T12:00:00.000Z</atom:updated>
    <category>API</category>
    <category>Update</category>
    <link>https://shopify.dev/changelog/admin-link-extensions-have-been-migrated-to-the-shopify-cli</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/admin-link-extensions-have-been-migrated-to-the-shopify-cli</guid>
  </item>
  <item>
    <title>New Built for Shopify design requirements</title>
    <description><![CDATA[ <div class=""><p>We have introduced new design requirements to our <a href="https://shopify.dev/docs/apps/launch/built-for-shopify/requirements" target="_blank" class="body-link">Built for Shopify requirements page</a>. These updates enhance the clarity of our existing design guidelines, making it easier to understand what’s needed to meet the standards for Built for Shopify status.</p>
<ul>
<li><strong><a href="https://shopify.dev/docs/apps/launch/built-for-shopify/requirements#follow-ux-best-practices" target="_blank" class="body-link">Follow UX best practices</a></strong>
 Your app's UI should demonstrate a good faith effort to leverage common UX best practices and meet a high bar for design quality.</li>
</ul>
<p> Starting in January 2025, apps will need to meet this requirement to be eligible for Built for Shopify status.</p>
<ul>
<li><strong><a href="https://shopify.dev/docs/apps/launch/built-for-shopify/requirements#use-tabs-for-secondary-navigation/" target="_blank" class="body-link">Use tabs for secondary navigation</a></strong>
 Use tabs sparingly for secondary navigation purposes when the <a href="https://shopify.dev/docs/api/app-bridge-library/web-components/ui-nav-menu" target="_blank" class="body-link">nav menu</a> isn’t sufficient. Clicking a tab should only change the content below it, not above. Tabs should never wrap onto multiple lines. Navigating between tabs should not cause the tabs to change position or move.</li>
</ul>
<p> Starting in January 2025, apps will need to meet this requirement to be eligible for Built for Shopify status.</p>
<p> This requirement will <strong>replace</strong> the following <a href="https://shopify.dev/docs/apps/design/navigation#app-nav" target="_blank" class="body-link">navigation</a> requirement:</p>
<p> <em>Don’t use tabs as primary navigation for your app, since Tabs are used in the Shopify admin as filters on index tables. Use the App Bridge ui-nav-menu web component or NavMenu React component instead.</em></p>
<ul>
<li><strong><a href="https://shopify.dev/docs/apps/launch/built-for-shopify/requirements#for-index-pages-use-full-width-layouts" target="_blank" class="body-link">For index pages, use full-width layouts</a></strong>
For <a href="https://polaris.shopify.com/patterns/resource-index-layout" target="_blank" class="body-link">resource index pages</a>, use a full-width page. This is helpful when merchants are dealing with lists of data that have many columns.</li>
</ul>
<p> This requirement will <strong>replace</strong> the following <a href="https://shopify.dev/docs/apps/design/layout#layout-options" target="_blank" class="body-link">layout options</a> requirements:</p>
<p> <em>Use a full-width page when merchants are dealing with lists of data that have many columns.</em></p>
<p> <em>Don’t use a single-column layout with a full-width page when you’re not dealing with lists of data. This makes the app feel out of place on larger displays. Apps should feel integrated with the Shopify admin.</em></p>
<p> <em>Keep your app aligned with the Shopify admin by using the <a href="https://polaris.shopify.com/patterns" target="_blank" class="body-link">Polaris Patterns</a> for common layouts such as index pages and resource detail pages.</em></p>
<ul>
<li><strong><a href="https://shopify.dev/docs/apps/launch/built-for-shopify/requirements#for-visual-editors-use-two-column-layouts" target="_blank" class="body-link">For visual editors, use two-column layouts</a></strong>
For visual editors, use a two-column layout. This allows merchants to preview the outcome of their edits in real-time.</li>
</ul>
<p> This requirement will <strong>replace</strong> the following <a href="https://shopify.dev/docs/apps/design/layout#layout-options" target="_blank" class="body-link">layout options</a> requirements:</p>
<p> <em>Complex editors should use the two-column primary/secondary layout in a default-width page. This offers merchants a streamlined editing experience.</em></p>
<p> <em>Don’t use a two-column primary/secondary layout for your app home page and other pages that don’t require a parent/child relationship between different parts of the interface.</em></p>
<p> <em>If your app’s page behaves as a dashboard, then use a two-column equal width layout. Use a three-column layout for higher content density.</em></p>
<p> <em>Don’t use two-column layouts in full-width pages, because it makes your app’s content harder to parse on larger displays.</em></p>
<ul>
<li><strong><a href="https://shopify.dev/docs/apps/launch/built-for-shopify/requirements#for-settings-pages-use-the-app-settings-layouts" target="_blank" class="body-link">For settings pages, use the app settings layouts </a></strong>
For settings pages, use the <a href="https://polaris.shopify.com/patterns/app-settings-layout" target="_blank" class="body-link">app settings layout</a> to provide merchants with clear context about your app's configuration options.</li>
</ul>
<p> This requirement will <strong>replace</strong> the following <a href="https://shopify.dev/docs/apps/design/layout#layout-options" target="_blank" class="body-link">layout options</a> requirements:</p>
<p> <em>Don’t use annotated layouts for content that isn’t editable. Use a single-column layout instead.</em></p>
<ul>
<li><strong><a href="https://shopify.dev/docs/apps/launch/built-for-shopify/requirements#place-your-content-in-card-like-containers" target="_blank" class="body-link">Place your content in card-like containers </a></strong>
Make the majority of your app’s content live in a container, such as a card. This creates visual structure and rhythm that helps merchants find information quickly. Complex components, headings, or images aren’t necessarily required to be in a container.</li>
</ul>
<p> This requirement will <strong>replace</strong> the following <a href="https://shopify.dev/docs/apps/design/layout#containers" target="_blank" class="body-link">layout containers</a> requirements:</p>
<p> <em>Make the majority of your app’s content live in a container, such as a card. This creates visual structure and rhythm that helps merchants find information quickly.</em></p>
<p> <em>Place your app’s content in a card-like container a majority of the time. Complex components or images aren’t necessarily required to be in a container.</em></p>
<ul>
<li><p><strong><a href="https://shopify.dev/docs/apps/launch/built-for-shopify/requirements#use-black-or-gray-for-the-majority-of-text" target="_blank" class="body-link">Use black or gray for the majority of text</a></strong>
Present the majority of app text in a legible and neutral color, such as black or dark gray.</p>
</li>
<li><p>**<a href="https://shopify.dev/docs/apps/launch/built-for-shopify/requirements#use-green-to-indicate-a-successful-outcome-or-status" target="_blank" class="body-link">Use green to indicate a successful outcome or status</a> **
Green (<code>--p-color-text-success</code> or <code>rgba(1, 75, 64, 1)</code>) should be used to indicate that a status is positive or that an action has been completed successfully. Don't use green to entice merchants or draw unnecessary attention.</p>
</li>
<li><p><strong><a href="https://shopify.dev/docs/apps/launch/built-for-shopify/requirements#use-yellow-to-indicate-a-pending-or-paused-status" target="_blank" class="body-link">Use yellow to indicate a pending or paused status </a></strong>
Yellow (<code>--p-color-bg-fill-caution</code> or <code>rgba(255, 230, 0, 1)</code>) should be used to indicate that a status is on pause or incomplete, or to highlight information that requires merchant attention but isn't urgent. Don’t use yellow for announcements.</p>
</li>
<li><p><strong><a href="https://shopify.dev/docs/apps/launch/built-for-shopify/requirements#use-orange-to-indicate-an-action-or-item-that-requires-the-merchants-attention" target="_blank" class="body-link">Use orange to indicate an action or item that requires the merchant's attention</a></strong>
Orange (<code>--p-color-bg-fill-warning</code> or <code>rgba(255, 184, 0, 1)</code>) should be used to indicate that a status is in-progress, pending, or to tell merchants that something needs their attention. Orange is the strongest, non-blocking color role in the Shopify admin. Don’t use orange for “under construction” or “coming soon” messaging.</p>
</li>
<li><p><strong><a href="https://shopify.dev/docs/apps/launch/built-for-shopify/requirements#use-red-to-indicate-an-unsuccessful-outcome-or-status" target="_blank" class="body-link">Use red to indicate an unsuccessful outcome or status</a></strong> 
Red (<code>--p-color-text-critical</code> or <code>rgba(142, 11, 33, 1)</code>) should only be used to convey messaging that implies an action is impossible, blocked, or has resulted in an error. Don't use red to entice merchants or draw unnecessary attention.</p>
</li>
</ul>
<p>The following requirements will be <strong>removed</strong>:</p>
<ul>
<li><p><strong><a href="https://shopify.dev/docs/apps/design/visual-design#color" target="_blank" class="body-link">Color roles</a></strong>
Don't contradict the Color Roles defined by the Polaris design system. In the example above, the dark pink affirming action could be misunderstood as red, which is used in the Shopify admin for destructive actions and critical errors.</p>
</li>
<li><p><strong><a href="https://shopify.dev/docs/apps/design/layout#layout-options" target="_blank" class="body-link">Three-column layouts</a></strong>
Set three-column layouts in a full-width page when you’re using them for interfaces like dashboards and analytics.
Don’t use three-column layouts to display unrelated content side by side, as it can confuse merchants. Use a single-column layout instead.</p>
</li>
</ul>
</div> ]]></description>
    <pubDate>Wed, 11 Dec 2024 12:00:00 +0000</pubDate>
    <atom:published>2024-12-11T12:00:00.000Z</atom:published>
    <atom:updated>2025-02-24T18:45:06.000Z</atom:updated>
    <category>Built for Shopify</category>
    <category>New</category>
    <link>https://shopify.dev/changelog/new-built-for-shopify-design-requirements</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/new-built-for-shopify-design-requirements</guid>
  </item>
  <item>
    <title>New Built for Shopify requirements page</title>
    <description><![CDATA[ <div class=""><p>All requirements for achieving Built for Shopify status are now consolidated in one place. The new <a href="https://shopify.dev/docs/apps/launch/built-for-shopify/requirements" target="_blank" class="body-link">Built for Shopify requirements page</a> offers a searchable format where you can easily reference all the technical, design, and category-specific requirements.</p>
</div> ]]></description>
    <pubDate>Wed, 11 Dec 2024 12:00:00 +0000</pubDate>
    <atom:published>2024-12-11T12:00:00.000Z</atom:published>
    <atom:updated>2024-12-11T12:00:00.000Z</atom:updated>
    <category>Built for Shopify</category>
    <category>New</category>
    <link>https://shopify.dev/changelog/new-built-for-shopify-requirements-page</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/new-built-for-shopify-requirements-page</guid>
  </item>
  <item>
    <title>Simplifying how metafield and metaobject permissions work</title>
    <description><![CDATA[ <div class=""><p>In the new year we’re simplifying how metafield and metaobject permissions work. This makes the system easier to work with and will further improve API response times.</p>
<p>In summary:</p>
<ul>
<li>On <strong>Jan 1, 2025</strong>, the <code>2025-01</code> admin API will remove both private and public permissions for <a href="https://shopify.dev/docs/apps/build/custom-data/reserved-prefixes" target="_blank" class="body-link">app-reserved metafields and metaobjects</a> from all <strong>mutations</strong>. </li>
<li>On <strong>Feb 1, 2025</strong>, <strong>across all API versions</strong>, we will fully remove <strong>private</strong> permissions for <a href="https://shopify.dev/docs/apps/build/custom-data/reserved-prefixes" target="_blank" class="body-link">app-reserved metafields and metaobjects</a>. <strong>We will migrate all existing metafields and metaobjects</strong> to be merchant readable automatically. All metafields and metaobjects will also become accessible in liquid.  </li>
<li>On <strong>Apr 1, 2025</strong>, <strong>across all API versions</strong>, we will fully remove <strong>public</strong> permissions for <a href="https://shopify.dev/docs/apps/build/custom-data/reserved-prefixes" target="_blank" class="body-link">app-reserved metafields and metaobjects</a>.<strong>We will migrate all existing metafields and metaobjects</strong> to be only accessible by your app and the merchant automatically.</li>
</ul>
<p>Details below: </p>
<p>On <strong>Jan 1, 2025</strong>:</p>
<ul>
<li>The following <strong>inputs</strong> to app-reserved <a href="https://shopify.dev/docs/api/admin-graphql/unstable/enums/MetafieldAdminAccessInput" target="_blank" class="body-link">metafield</a> and <a href="https://shopify.dev/docs/api/admin-graphql/unstable/enums/MetaobjectAdminAccessInput" target="_blank" class="body-link">metaobject</a> API <strong>mutations</strong> will be removed in 2025-01: <code>PRIVATE</code>, <code>PUBLIC_READ</code>, <code>PUBLIC_READ_WRITE</code></li>
<li>The following <strong>outputs</strong> from app-reserved <a href="https://shopify.dev/docs/api/admin-graphql/unstable/enums/MetafieldAdminAccess" target="_blank" class="body-link">metafield</a> and <a href="https://shopify.dev/docs/api/admin-graphql/unstable/enums/MetaobjectAdminAccess" target="_blank" class="body-link">metaobject</a> API <strong>queries</strong> will be removed in <code>2025-01</code>: <code>LEGACY_LIQUID_ONLY</code></li>
<li>Otherwise, existing <strong>queries</strong> and data will continue to support these removed input types</li>
</ul>
<p>On <strong>Feb 1, 2025</strong>:</p>
<ul>
<li>The following <strong>outputs</strong> from app-reserved <a href="https://shopify.dev/docs/api/admin-graphql/unstable/enums/MetafieldAdminAccess" target="_blank" class="body-link">metafield</a> and <a href="https://shopify.dev/docs/api/admin-graphql/unstable/enums/MetaobjectAdminAccess" target="_blank" class="body-link">metaobject</a> API <strong>queries</strong> will be removed <strong>across all versions</strong>:<code>PRIVATE</code></li>
<li><strong>Existing</strong> app-reserved metafields and metaobjects permissions <strong>will be migrated</strong>: <code>PRIVATE</code> → <code>MERCHANT_READ</code></li>
<li>All metafields and metaobjects will become accessible in liquid</li>
</ul>
<p>On <strong>Apr 1, 2025</strong>:</p>
<ul>
<li>The following outputs from app-reserved <a href="https://shopify.dev/docs/api/admin-graphql/unstable/enums/MetafieldAdminAccess" target="_blank" class="body-link">metafield</a> and <a href="https://shopify.dev/docs/api/admin-graphql/unstable/enums/MetaobjectAdminAccess" target="_blank" class="body-link">metaobject</a> API <strong>queries</strong> will be removed <strong>across all versions</strong>:<code>PUBLIC_READ</code> and <code>PUBLIC_READ_WRITE</code> </li>
<li><strong>Existing</strong> app-reserved metafields and metaobjects permissions <strong>will be migrated</strong>:<code>PUBLIC_READ</code> → <code>MERCHANT_READ</code> and <code>PUBLIC_READ_WRITE</code> → <code>MERCHANT_READ_WRITE</code></li>
</ul>
</div> ]]></description>
    <pubDate>Tue, 10 Dec 2024 22:01:00 +0000</pubDate>
    <atom:published>2024-12-10T22:01:00.000Z</atom:published>
    <atom:updated>2024-12-11T22:16:15.000Z</atom:updated>
    <category>Action Required</category>
    <category>API</category>
    <category>Deprecation announcement</category>
    <category>Admin GraphQL API</category>
    <category>Liquid</category>
    <category>2025-01</category>
    <link>https://shopify.dev/changelog/simplifying-how-metafield-and-metaobject-permissions-work</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/simplifying-how-metafield-and-metaobject-permissions-work</guid>
  </item>
  <item>
    <title>Admin REST API product image is now deprecated</title>
    <description><![CDATA[ <div class=""><p>As of <code>2025-01</code>, the admin REST API for the <a href="https://shopify.dev/docs/api/admin-rest/2024-10/resources/product-image" target="_blank" class="body-link">product image resource</a> is now deprecated. It is recommended to migrate to GraphQL and use media IDs going forward. The <code>admin_graphql_api_id</code> will <a href="https://shopify.dev/changelog/product-image-resource-in-rest-now-returns-a-media-image-gid-to-streamline-migration-to-graphql" target="_blank" class="body-link">return a media image ID</a> to streamline the migration process. More information and a migration guide can be found in the <a href="https://shopify.dev/docs/apps/build/graphql/migrate/new-files-model" target="_blank" class="body-link">dev docs</a>.</p>
</div> ]]></description>
    <pubDate>Mon, 09 Dec 2024 20:03:00 +0000</pubDate>
    <atom:published>2024-12-09T20:03:00.000Z</atom:published>
    <atom:updated>2024-12-09T20:15:24.000Z</atom:updated>
    <category>API</category>
    <category>Deprecation announcement</category>
    <category>Admin REST API</category>
    <category>2025-01</category>
    <link>https://shopify.dev/changelog/admin-rest-api-product-image-is-now-deprecated</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/admin-rest-api-product-image-is-now-deprecated</guid>
  </item>
  <item>
    <title>.dev Assistant now supports threaded chats and GraphQL migration support</title>
    <description><![CDATA[ <div class=""><p>The .dev Assistant now converts REST requests to GraphQL operations. Just copy and paste your REST request, and receive the equivalent GraphQL Admin API query or mutation.</p>
<p>Plus, your conversations with the .dev Assistant just got smarter! You can now ask follow-up questions while maintaining context from your original prompt - no need to start over.</p>
<p>Ready to try it? Head to <a href="http://shopify.dev/?assistant=1" target="_blank" class="body-link">Shopify.dev</a> and give it a spin.  </p>
</div> ]]></description>
    <pubDate>Mon, 09 Dec 2024 20:00:00 +0000</pubDate>
    <atom:published>2024-12-09T20:00:00.000Z</atom:published>
    <atom:updated>2024-12-13T22:08:59.000Z</atom:updated>
    <category>Tools</category>
    <category>Update</category>
    <link>https://shopify.dev/changelog/dev-assistant-now-supports-threaded-chats-and-graphql-migration-support</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/dev-assistant-now-supports-threaded-chats-and-graphql-migration-support</guid>
  </item>
  <item>
    <title>Carrier services and Fulfillment services performance dashboards are now available in the partner dashboard</title>
    <description><![CDATA[ <div class=""><p>Carrier services and Fulfillment services performance dashboards are now available, and can be found on the Insights page in the apps section of the Partner Dashboard. </p>
<p>Partners can now track their apps' performance against our 2025 Carrier services and Fulfillment services standards.</p>
</div> ]]></description>
    <pubDate>Mon, 09 Dec 2024 15:41:00 +0000</pubDate>
    <atom:published>2024-12-09T15:41:00.000Z</atom:published>
    <atom:updated>2024-12-16T21:43:59.000Z</atom:updated>
    <category>Built for Shopify</category>
    <category>Update</category>
    <link>https://shopify.dev/changelog/carrier-services-and-fulfillment-services-performance-dashboards-are-now-available-in-the-partner-dashboard</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/carrier-services-and-fulfillment-services-performance-dashboards-are-now-available-in-the-partner-dashboard</guid>
  </item>
  <item>
    <title>Customize line items in Checkout and Customer Accounts order summary using new Checkout Branding API settings </title>
    <description><![CDATA[ <div class=""><p><strong>As of Dec 4th, 2024</strong>, you can use the settings under checkoutBrandingInput (see: merchandiseThumbnail) in the Checkout Branding API to modify the appearance of line items in Checkout and Customer Accounts order summary for Shopify Plus merchants. </p>
<p>These line-item customizations include the ability to configure custom aspect ratios for product thumbnails, adjust image fit, and modify the background color of quantity badges. </p>
<p>Note: The aspect ratio setting is only available on the current unstable release. </p>
<p>Learn more under <a href="https://shopify.dev/docs/api/admin-graphql/2025-01/mutations/checkoutBrandingUpsert#argument-checkoutbrandinginput" target="_blank" class="body-link">checkoutBrandingInput</a> in the Checkout Branding API documentation. </p>
</div> ]]></description>
    <pubDate>Fri, 06 Dec 2024 20:00:00 +0000</pubDate>
    <atom:published>2024-12-06T20:00:00.000Z</atom:published>
    <atom:updated>2024-12-06T20:00:00.000Z</atom:updated>
    <category>API</category>
    <category>Update</category>
    <category>Admin GraphQL API</category>
    <category>2025-01</category>
    <link>https://shopify.dev/changelog/customize-line-items-in-checkout-and-customer-accounts-order-summary-using-new-checkout-branding-api-settings</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/customize-line-items-in-checkout-and-customer-accounts-order-summary-using-new-checkout-branding-api-settings</guid>
  </item>
  <item>
    <title>App extensions can’t be used for self-promotion or related activities</title>
    <description><![CDATA[ <div class=""><p>Starting December 5, 2024, app extensions, including admin links, checkout extensibility, and theme app extensions can’t be used to advertise your app, promote related apps, or request reviews.</p>
</div> ]]></description>
    <pubDate>Thu, 05 Dec 2024 16:29:00 +0000</pubDate>
    <atom:published>2024-12-05T16:29:00.000Z</atom:published>
    <atom:updated>2024-12-05T16:29:00.000Z</atom:updated>
    <category>Action Required</category>
    <category>App store</category>
    <category>Update</category>
    <link>https://shopify.dev/changelog/app-extensions-can-t-be-used-for-self-promotion-or-related-activities</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/app-extensions-can-t-be-used-for-self-promotion-or-related-activities</guid>
  </item>
  <item>
    <title>New Chat API for building chat apps in Shopify Checkout </title>
    <description><![CDATA[ <div class=""><p>As of <strong>December 4th, 2024</strong>, you can now request access to the <a href="https://shopify.dev/docs/apps/build/checkout/chat" target="_blank" class="body-link">Chat API</a> to offer real-time customer support on the Checkout and Thank you pages. You will get a new chat component to embed your chat app into Checkout and have complete control over the styling of your interface. </p>
<p>The Chat API allows your chat widget to communicate with your app to query information about the Checkout and Store, like cart details, buyer information, store settings, etc.</p>
<p><strong>Request access to the Chat API through your partner dashboard</strong>. </p>
</div> ]]></description>
    <pubDate>Thu, 05 Dec 2024 15:00:00 +0000</pubDate>
    <atom:published>2024-12-05T15:00:00.000Z</atom:published>
    <atom:updated>2024-12-05T15:00:00.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <category>2024-10</category>
    <link>https://shopify.dev/changelog/new-chat-api-for-building-chat-apps-in-shopify-checkout</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/new-chat-api-for-building-chat-apps-in-shopify-checkout</guid>
  </item>
  <item>
    <title>PrivateMetafield is now deprecated</title>
    <description><![CDATA[ <div class=""><p>Starting in API version <strong>2025-01</strong>, PrivateMetafield will be removed from the GraphQL Admin API. Use <a href='https://shopify.dev/docs/apps/build/custom-data/metafields/use-app-data-metafields'>app-data metafields</a> instead. If the metafield is needed per resource, consider the <a href='https://shopify.dev/docs/apps/build/custom-data/metafields/migrate-private-metafields'>migration guide</a> for using app-reserved namespaces.</p>
</div> ]]></description>
    <pubDate>Thu, 05 Dec 2024 14:15:00 +0000</pubDate>
    <atom:published>2024-12-05T14:15:00.000Z</atom:published>
    <atom:updated>2024-12-05T14:18:24.000Z</atom:updated>
    <category>Action Required</category>
    <category>API</category>
    <category>Deprecation announcement</category>
    <category>Admin GraphQL API</category>
    <category>Events &amp; webhooks</category>
    <category>2025-01</category>
    <link>https://shopify.dev/changelog/privatemetafield-is-now-deprecated</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/privatemetafield-is-now-deprecated</guid>
  </item>
  <item>
    <title>Configure optional scopes for Shopify apps</title>
    <description><![CDATA[ <div class=""><p>Apps on Admin API version <code>2024-10</code> can use the new <code>optional_scopes</code> app configuration to:</p>
<ul>
<li>Separate required scopes from optional</li>
<li>Request unique sets of access scopes on a store-by-store basis</li>
<li>Revoke optional scopes granted to the app from a store</li>
<li>Request and revoke scopes in-context, at app runtime</li>
</ul>
<p>All while taking advantage of <a href="https://shopify.dev/docs/apps/build/authentication-authorization/app-installation" target="_blank" class="body-link">Shopify managed install</a>.</p>
<h3>Declaring optional scopes</h3>
<p>In your <a href="https://shopify.dev/docs/apps/build/cli-for-apps/app-configuration" target="_blank" class="body-link">app configuration</a>, specify optional scopes that your app may request, in addition to your app’s required <code>scopes</code>:</p>
<pre><code class="language-toml">[access_scopes]
scopes = &quot;read_products&quot;
optional_scopes = [ &quot;write_products&quot;, &quot;read_discounts&quot;, &quot;read_themes&quot; ]
</code></pre>
<h3>Requesting, revoking, and querying optional scopes at runtime</h3>
<p>With optional scopes, apps can prompt merchants to grant their app access either from a server-side API, or from a client-side App Bridge API for a more integrated experience. See our documentation on <a href="https://shopify.dev/docs/apps/build/authentication-authorization/app-installation/manage-access-scopes#request-new-access-scopes-dynamically" target="_blank" class="body-link">how to request access scopes dynamically</a> for details.</p>
<p>Granted optional scopes can be dynamically revoked from stores by apps. Our APIs supply a <code>revoke</code> method for this, and we also provide a GraphQL <a href="https://shopify.dev/docs/api/admin-graphql/2024-10/mutations/appRevokeAccessScopes" target="_blank" class="body-link"><code>appRevokeAccessScopes</code> mutation</a>.</p>
<p>With optional scopes, apps may need to know which scopes are granted on the current store. We supply a <code>query</code> method that lists the granted scopes on the store. Apps can also manually query the <a href="https://shopify.dev/docs/api/admin-graphql/2024-10/objects/AppInstallation#field-accessscopes" target="_blank" class="body-link"><code>accessScopes</code> field on the <code>AppInstallation</code> object</a>.</p>
<h3>Learn more</h3>
<p>To learn more about optional scopes, see our documentation on <a href="https://shopify.dev/docs/apps/build/authentication-authorization/app-installation/manage-access-scopes" target="_blank" class="body-link">how to manage access scopes</a>. See also our client-side <a href="https://shopify.dev/docs/api/app-bridge-library/apis/scopes" target="_blank" class="body-link">App Bridge Scopes API</a>, and our server-side <a href="https://shopify.dev/docs/api/shopify-app-remix/v3/apis/scopes" target="_blank" class="body-link">Remix Scopes API</a>.</p>
</div> ]]></description>
    <pubDate>Wed, 04 Dec 2024 19:00:00 +0000</pubDate>
    <atom:published>2024-12-04T19:00:00.000Z</atom:published>
    <atom:updated>2024-12-04T19:27:13.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <category>Admin GraphQL API</category>
    <category>2024-10</category>
    <link>https://shopify.dev/changelog/configure-optional-scopes-for-shopify-apps</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/configure-optional-scopes-for-shopify-apps</guid>
  </item>
  <item>
    <title>JS Buy SDK Deprecation Notice</title>
    <description><![CDATA[ <div class=""><p><strong>The JS Buy SDK is deprecated as of January, 2025.</strong> It will no longer be updated or maintained by Shopify past that point. A final major version will be released in early 2025 to remove the SDK's dependency on the <a href="https://shopify.dev/changelog/deprecation-of-checkout-apis" target="_blank" class="body-link">deprecated Checkout APIs</a>, replacing them with <a href="https://shopify.dev/docs/storefronts/headless/building-with-the-storefront-api/cart" target="_blank" class="body-link">Cart APIs</a>. Updating to this new version will allow the SDK to continue to function for most use cases.</p>
<p>If you are using the JS Buy SDK, you have two options:</p>
<ol>
<li><p>Recommended Option: switch to the <a href="https://github.com/Shopify/shopify-app-js/tree/main/packages/api-clients/storefront-api-client#readme" target="_blank" class="body-link">Storefront API Client</a>
  a. The Storefront API Client manages the API's authentication information and provides various methods that enable devs to interact with the API. This is the preferred and more future-proof solution. See this <a href="https://github.com/Shopify/js-buy-sdk/tree/main/migration-guide/README.md" target="_blank" class="body-link">migration guide</a> to help you transition.</p>
</li>
<li><p>Stopgap Option: Upgrade to JS Buy SDK v3.0 (coming soon)
 a. This allows you to maintain your current setup with minimal changes for use cases that are supported by the Cart API. A migration guide with details on supported use cases will be available soon. If you choose this option, we still recommend that you switch to the Storefront API Client in the future.</p>
</li>
</ol>
<p><strong>Critical Deadline: July 1st, 2025.</strong> You must implement one of these changes by this date, or customers will not be able to complete purchases. Please choose the option that best suits your needs and timelines.</p>
</div> ]]></description>
    <pubDate>Tue, 03 Dec 2024 20:31:00 +0000</pubDate>
    <atom:published>2024-12-03T20:31:00.000Z</atom:published>
    <atom:updated>2025-03-13T16:52:39.000Z</atom:updated>
    <category>Action Required</category>
    <category>API</category>
    <category>Deprecation announcement</category>
    <link>https://shopify.dev/changelog/js-buy-sdk-deprecation-notice</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/js-buy-sdk-deprecation-notice</guid>
  </item>
  <item>
    <title>Add PickupAddress for subscription contracts in customer API</title>
    <description><![CDATA[ <div class=""><p>As of 2025-01, you can use the <code>PickupAddress</code> field in both <code>SubscriptionDeliveryMethodPickupOption</code> and <code>SubscriptionPickupOption</code> to query for a customer pickup address.</p>
<p>Learn more about this field at <a href="https://shopify.dev/docs/api/customer/2025-01/objects/PickupAddress" target="_blank" class="body-link">PickupAddress</a></p>
</div> ]]></description>
    <pubDate>Mon, 25 Nov 2024 14:51:00 +0000</pubDate>
    <atom:published>2024-11-25T14:51:00.000Z</atom:published>
    <atom:updated>2024-11-25T14:51:00.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <category>Customer Account API</category>
    <category>2025-01</category>
    <link>https://shopify.dev/changelog/add-pickupaddress-for-subscription-contracts-in-customer-api</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/add-pickupaddress-for-subscription-contracts-in-customer-api</guid>
  </item>
  <item>
    <title>Increased limits for automatic function-based discounts</title>
    <description><![CDATA[ <div class=""><p>We've expanded the capability of our discount management system by increasing the limit for automatic app-based discounts from 5 to 25. </p>
<p>This update allows developers to create and manage a larger number of concurrent discount campaigns, offering more flexibility and targeted promotional strategies for merchants. The limit increase enables developers who are currently managing multiple promotions using Shopify Scripts to migrate to Shopify Functions. With the limit increase on Shopify Functions, each discount can be configured with its own start and end dates, giving merchants better precision in promotional timing and controls to govern which discounts can coexist on a cart. </p>
<p>Learn more about discount combinations &amp; limits in the <a href="https://shopify.dev/docs/apps/build/discounts/" target="_blank" class="body-link">Shopify Dev Docs</a>.</p>
</div> ]]></description>
    <pubDate>Thu, 21 Nov 2024 19:01:00 +0000</pubDate>
    <atom:published>2024-11-21T19:01:00.000Z</atom:published>
    <atom:updated>2024-11-21T20:02:31.000Z</atom:updated>
    <category>Platform</category>
    <category>Update</category>
    <category>Admin GraphQL API</category>
    <link>https://shopify.dev/changelog/increased-limits-for-automatic-function-based-discounts</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/increased-limits-for-automatic-function-based-discounts</guid>
  </item>
  <item>
    <title>Search and browse apps using structured category details in the Shopify App Store</title>
    <description><![CDATA[ <div class=""><p>Merchants can now search and browse apps based on a specific category feature in the Shopify App Store. Keep your apps updated with the most relevant category features and follow our <a href="https://shopify.dev/docs/apps/launch/app-store-review/app-listing-categories#app-category-details" target="_blank" class="body-link">best practices</a>.</p>
</div> ]]></description>
    <pubDate>Thu, 21 Nov 2024 15:20:00 +0000</pubDate>
    <atom:published>2024-11-21T15:20:00.000Z</atom:published>
    <atom:updated>2024-11-22T15:08:50.000Z</atom:updated>
    <category>App store</category>
    <category>Update</category>
    <link>https://shopify.dev/changelog/search-and-browse-apps-using-structured-category-details-in-the-shopify-app-store</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/search-and-browse-apps-using-structured-category-details-in-the-shopify-app-store</guid>
  </item>
  <item>
    <title>New dynamic source attributes available in the online store editor</title>
    <description><![CDATA[ <div class=""><p>You can now use more dynamic source attributes in the online store editor. The following new attributes have been added: </p>
<ul>
<li><strong>Product</strong>: <code>url</code>, <code>featured_image</code>, <code>description</code></li>
<li><strong>Collection</strong>: <code>url</code>, <code>description</code></li>
<li><strong>Article</strong>: <code>author</code>, <code>comments_count</code>, <code>content</code>, <code>excerpt</code> </li>
<li><strong>Blog</strong>: <code>content</code></li>
</ul>
<p>Learn more about dynamic sources on <a href="https://shopify.dev/docs/storefronts/themes/architecture/settings/dynamic-sources" target="_blank" class="body-link">Shopify.dev</a>.</p>
</div> ]]></description>
    <pubDate>Mon, 18 Nov 2024 21:47:00 +0000</pubDate>
    <atom:published>2024-11-18T21:47:00.000Z</atom:published>
    <atom:updated>2024-11-19T00:58:51.000Z</atom:updated>
    <category>Themes</category>
    <category>Update</category>
    <link>https://shopify.dev/changelog/new-dynamic-source-attributes-available-in-the-online-store-editor</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/new-dynamic-source-attributes-available-in-the-online-store-editor</guid>
  </item>
  <item>
    <title>Strongly-matched apps will be highlighted in Shopify app store search results</title>
    <description><![CDATA[ <div class=""><p>Apps that are <strong>strongly-matched to brand term searches</strong> will now be highlighted in search results.</p>
<ul>
<li>When a merchant searches for a specific app (e.g. Shopify Inbox), we use organic search results and behavioral data to find the matching app. The high-match app is now prominently featured at the top of search results, above ads. </li>
<li>This treatment is automatically applied when your app listing is optimized and shows strong branded search match.</li>
<li>Make sure your app has a specific brand name and follow our <a href="https://shopify.dev/docs/apps/launch/app-requirements-checklist#5-app-listing" target="_blank" class="body-link">best practices</a> around improving organic search.</li>
</ul>
<p>In addition, we’ve <strong>removed the list of restricted keywords</strong> previously implemented for search ads. </p>
<ul>
<li>More keywords are now available for bidding, including previously restricted brand terms. </li>
<li>We are ensuring a more equitable advertising environment and to align Shopify's ad products with industry standards and the familiar patterns of other search ad platforms.</li>
</ul>
</div> ]]></description>
    <pubDate>Mon, 18 Nov 2024 14:00:00 +0000</pubDate>
    <atom:published>2024-11-18T14:00:00.000Z</atom:published>
    <atom:updated>2024-11-18T16:39:54.000Z</atom:updated>
    <category>App store</category>
    <category>Update</category>
    <link>https://shopify.dev/changelog/strongly-matched-apps-will-be-highlighted-in-shopify-app-store-search-results</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/strongly-matched-apps-will-be-highlighted-in-shopify-app-store-search-results</guid>
  </item>
  <item>
    <title>Edit customer account menu including adding full-page extensions </title>
    <description><![CDATA[ <div class=""><p>As a part of the <a href="https://shopify.dev/docs/apps/build/customer-accounts" target="_blank" class="body-link">Customer Account Extensibility Developer Preview</a>,  you can now add, remove, or edit menu items in your customer account header menu. This update helps you better understand how merchants will be able to add any type of link to their customer accounts main menu.</p>
<p>Included in this update:</p>
<p><strong>All full-page extensions are now linkable</strong> -  Before this update, full-page extensions had to be explicitly declared as linkable. Now, all full-page extensions will be linkable by default and merchants will be prompted in the checkout &amp; accounts editor to add a link to your full-page extension in the header menu. To take advantage of this change, deploy a new version of your extension. </p>
<p><a href="https://shopify.dev/docs/apps/build/customer-accounts/full-page-extensions#prevent-direct-linking" target="_blank" class="body-link">To prevent merchants from linking to your page, declare your extension as not linkable</a>.</p>
<p><strong>Add any type of link</strong>  - Including links to default online store pages (products, collections, pages), customer account pages (order, profile and settings), customer account apps (full-page extensions), as well as any URL. By default, the menu will link to online store (Home), and Orders.</p>
<p><strong>Use the same menu across online store &amp; customer accounts</strong> -  Merchants will be able to use the same menu in their online store and customer accounts.</p>
<p><strong>Navigation has moved</strong> -  You can now find the navigation tool in Admin &gt; Content &gt; Menus. It has been moved from its original location of Online Store &gt; Navigation. </p>
<p>You can learn more about full-page extensions <a href="https://shopify.dev/docs/apps/build/customer-accounts/full-page-extensions" target="_blank" class="body-link">here</a>. </p>
</div> ]]></description>
    <pubDate>Fri, 15 Nov 2024 16:00:00 +0000</pubDate>
    <atom:published>2024-11-15T16:00:00.000Z</atom:published>
    <atom:updated>2024-11-15T16:14:24.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <link>https://shopify.dev/changelog/edit-customer-account-menu-including-adding-full-page-extensions</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/edit-customer-account-menu-including-adding-full-page-extensions</guid>
  </item>
  <item>
    <title>`manualPaymentGateway` field added to `orderTransaction` object</title>
    <description><![CDATA[ <div class=""><p>As of GraphQL Admin API version 2025-01, the <code>manualPaymentGateway</code> field will be added to <code>orderTransaction</code> object. This field indicates if the transaction is processed by a manual payment gateway.</p>
</div> ]]></description>
    <pubDate>Fri, 15 Nov 2024 12:56:00 +0000</pubDate>
    <atom:published>2024-11-15T12:56:00.000Z</atom:published>
    <atom:updated>2024-11-15T12:56:00.000Z</atom:updated>
    <category>API</category>
    <category>Update</category>
    <category>Admin GraphQL API</category>
    <category>Admin REST API</category>
    <category>2025-01</category>
    <link>https://shopify.dev/changelog/manualpaymentgateway-field-added-to-ordertransaction-object</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/manualpaymentgateway-field-added-to-ordertransaction-object</guid>
  </item>
  <item>
    <title>Built for Shopify category-specific criteria are now available</title>
    <description><![CDATA[ <div class=""><p>Category-specific criteria are now available. This feature gives developers more clarity on the <a href="https://shopify.dev/docs/apps/launch/built-for-shopify/category-achievement-criteria" target="_blank" class="body-link">category-specific criteria</a> that apply to certain Built for Shopify apps. To view or update your app's category, check its distribution page in your Partner Dashboard.</p>
<p>Your app's pre-selected category is based on its categorization in the Shopify App Store. You can update your category based on your app's functionality. Built for Shopify reviewers have final approval on all categorizations.</p>
<p>Starting in January 2025, all Built for Shopify reviews will require accurate categorization. This applies to existing Built for Shopify apps, as well as new applications.</p>
</div> ]]></description>
    <pubDate>Thu, 14 Nov 2024 17:30:00 +0000</pubDate>
    <atom:published>2024-11-14T17:30:00.000Z</atom:published>
    <atom:updated>2024-12-09T22:53:35.000Z</atom:updated>
    <category>Built for Shopify</category>
    <category>Update</category>
    <link>https://shopify.dev/changelog/built-for-shopify-category-specific-criteria-are-now-available</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/built-for-shopify-category-specific-criteria-are-now-available</guid>
  </item>
  <item>
    <title>Conditionally disable gift cards in checkout using custom logic with the Payment Customization API </title>
    <description><![CDATA[ <div class=""><p>As of Nov 12, 2024, you can use the HideOperation in the Payment Customization Function API to disable native gift card functionality and Shopify-integrated third-party gift card systems. Disabling gift cards hides the gift card field, removes any applied gift cards, and prevents any gift cards from being applied by UI extensions.</p>
<p>The ability to disable the gift card field is available in the unstable API version and will be released to the stable 2025-01 API version.</p>
<p>Learn more about <a href="https://shopify.dev/docs/apps/build/checkout/payments" target="_blank" class="body-link">payment customizations</a>.</p>
</div> ]]></description>
    <pubDate>Tue, 12 Nov 2024 21:00:00 +0000</pubDate>
    <atom:published>2024-11-12T21:00:00.000Z</atom:published>
    <atom:updated>2024-12-13T22:24:41.000Z</atom:updated>
    <category>Action Required</category>
    <category>API</category>
    <category>Update</category>
    <category>2025-01</category>
    <link>https://shopify.dev/changelog/conditionally-disable-gift-cards-in-checkout-using-custom-logic-with-the-payment-customization-api</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/conditionally-disable-gift-cards-in-checkout-using-custom-logic-with-the-payment-customization-api</guid>
  </item>
  <item>
    <title>Marketing Activity Extensions can be migrated to CLI</title>
    <description><![CDATA[ <div class=""><p>As of Shopify CLI 3.70, existing Marketing Activity Extensions can be migrated from the Partner Dashboard to CLI. Learn more about how to import and migrate your Marketing Activity Extensions to CLI <a href="https://shopify.dev/docs/apps/build/marketing-analytics/marketing-activities" target="_blank" class="body-link">here</a></p>
</div> ]]></description>
    <pubDate>Tue, 12 Nov 2024 21:00:00 +0000</pubDate>
    <atom:published>2024-11-12T21:00:00.000Z</atom:published>
    <atom:updated>2024-11-12T21:00:00.000Z</atom:updated>
    <category>Tools</category>
    <category>Update</category>
    <link>https://shopify.dev/changelog/marketing-activity-extensions-can-be-migrated-to-cli</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/marketing-activity-extensions-can-be-migrated-to-cli</guid>
  </item>
  <item>
    <title>Changes to our Font Library</title>
    <description><![CDATA[ <div class=""><p>As part of a move towards open-source fonts, and in an effort to refine our font offerings, we have deprecated some fonts in our library. We’re also expanding the library of open-source fonts, with <a href="https://shopify.dev/docs/storefronts/themes/architecture/settings/fonts#available-fonts" target="_blank" class="body-link">32 new high quality typefaces</a> available today.</p>
<p>Action Required: For theme developers with published themes in the Shopify theme store using any of the <a href="https://shopify.dev/docs/storefronts/themes/architecture/settings/fonts#deprecated-fonts" target="_blank" class="body-link">deprecated fonts</a>, <strong>please replace your default font for each preset by January 3, 2025.</strong> We have provided recommended replacements in the developer documentation that maintain a similar style to the deprecated font, or you can choose any other available font from our library.</p>
<p>Merchants who are currently using deprecated fonts will be prompted to make updates at a later date.</p>
<p>Update August 2025: Most merchants' fonts will be automatically updated to a recommended font of a similar style. See <a href="https://shopify.dev/changelog/font-library-updates-automatic-replacement-for-deprecated-fonts" target="_blank" class="body-link">this post</a> for further details.</p>
</div> ]]></description>
    <pubDate>Tue, 12 Nov 2024 18:01:00 +0000</pubDate>
    <atom:published>2024-11-12T18:01:00.000Z</atom:published>
    <atom:updated>2025-08-22T23:27:57.000Z</atom:updated>
    <category>Action Required</category>
    <category>Themes</category>
    <category>Deprecation announcement</category>
    <link>https://shopify.dev/changelog/changes-to-our-font-library</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/changes-to-our-font-library</guid>
  </item>
  <item>
    <title>Built for Shopify Fulfillment services assessments category specific criteria</title>
    <description><![CDATA[ <div class=""><p>The Built for Shopify <a href="https://shopify.dev/docs/apps/launch/built-for-shopify/category-achievement-criteria#fulfillment-services-apps" target="_blank" class="body-link">category-specific criteria assessments</a> are now available for Fulfillment service apps. You can review whether these requirements apply to your Built for Shopify app by checking its distribution page through your Partner Dashboard.</p>
<p>These assessments apply to existing Built for Shopify apps, as well as new applications.</p>
</div> ]]></description>
    <pubDate>Thu, 07 Nov 2024 20:29:00 +0000</pubDate>
    <atom:published>2024-11-07T20:29:00.000Z</atom:published>
    <atom:updated>2024-12-09T22:53:31.000Z</atom:updated>
    <category>Built for Shopify</category>
    <category>Update</category>
    <link>https://shopify.dev/changelog/built-for-shopify-fulfillment-services-assessments-category-specific-criteria</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/built-for-shopify-fulfillment-services-assessments-category-specific-criteria</guid>
  </item>
  <item>
    <title>POS Legacy Extensions Will Be Deprecated in February 2025</title>
    <description><![CDATA[ <div class=""><p>On February 28, 2025, POS Links, POS cart app extensions, and POS product recommendations will be deprecated. Developers and merchants will no longer be able to view or access these extensions in Shopify POS. </p>
<p>We recommend you rebuild legacy extensions with <a href="https://shopify.dev/docs/api/pos-ui-extensions" target="_blank" class="body-link">POS UI Extensions</a>. Not only do POS UI Extensions have extensive capabilities today, but we’ll continue to grow these capabilities into the future. </p>
<p><strong>POS Links:</strong></p>
<ul>
<li>Recommendation: Rebuild using <a href="https://shopify.dev/docs/api/pos-ui-extensions" target="_blank" class="body-link">POS UI Extensions</a></li>
<li>Alternative: Embed your app within Shopify POS using the Partner Dashboard. Note that merchants can manually add and access these from the smart grid.</li>
</ul>
<p><strong>Cart App Extensions and Product Recommendation Extensions:</strong></p>
<ul>
<li>Recommendation: Rebuild using <a href="https://shopify.dev/docs/api/pos-ui-extensions" target="_blank" class="body-link">POS UI Extensions</a>. POS UI extensions provide necessary components and APIs to develop extensions that run natively on Shopify POS.</li>
</ul>
<p>If you have any questions, please contact <a href="https://help.shopify.com/en/support/partners/org-select" target="_blank" class="body-link">partner support</a> for assistance. </p>
</div> ]]></description>
    <pubDate>Wed, 06 Nov 2024 13:55:00 +0000</pubDate>
    <atom:published>2024-11-06T13:55:00.000Z</atom:published>
    <atom:updated>2025-04-22T13:11:55.000Z</atom:updated>
    <category>Action Required</category>
    <category>API</category>
    <category>Deprecation announcement</category>
    <category>POS Extensions</category>
    <link>https://shopify.dev/changelog/pos-legacy-extensions-will-be-deprecated-in-february-2025</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/pos-legacy-extensions-will-be-deprecated-in-february-2025</guid>
  </item>
  <item>
    <title>Remove `metafieldDelete` in favor of `metafieldsDelete`</title>
    <description><![CDATA[ <div class=""><p>As of <code>2025-01</code> the <code>metafieldDelete</code> Admin API method is being removed. The <code>metafieldsDelete</code> method should be used instead. The former relies on the Metafield GID, while the latter takes an array of Metafield Identifiers composed of <code>ownerId</code>, <code>namespace</code>, and <code>key</code>. Note that the Metafield GID is not an option in <code>metafieldsDelete</code>.</p>
</div> ]]></description>
    <pubDate>Tue, 05 Nov 2024 16:46:00 +0000</pubDate>
    <atom:published>2024-11-05T16:46:00.000Z</atom:published>
    <atom:updated>2025-10-07T22:48:30.000Z</atom:updated>
    <category>Action Required</category>
    <category>API</category>
    <category>Deprecation announcement</category>
    <category>Admin GraphQL API</category>
    <category>2025-01</category>
    <link>https://shopify.dev/changelog/remove-metafielddelete-in-favor-of-metafieldsdelete</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/remove-metafielddelete-in-favor-of-metafieldsdelete</guid>
  </item>
  <item>
    <title>Updates to Shopify’s Standard Product Taxonomy - October 2024</title>
    <description><![CDATA[ <div class=""><p>As of the latest Shopify’s Standard Product Taxonomy version <code>2024-10</code>, you can now find additional categories, attributes and values across product areas such as Apparel &amp; Accessories, Home &amp; Garden, Sporting Goods, and more. The taxonomy is an evolving library that’s informed by user feedback and market insights, with each release aiming to help you more accurately classify your products.</p>
<p>More details about this update can be found in the <a href="https://github.com/Shopify/product-taxonomy/releases/tag/v2024-10" target="_blank" class="body-link">release notes</a>. </p>
</div> ]]></description>
    <pubDate>Mon, 04 Nov 2024 23:30:00 +0000</pubDate>
    <atom:published>2024-11-04T23:30:00.000Z</atom:published>
    <atom:updated>2024-11-04T23:30:00.000Z</atom:updated>
    <category>API</category>
    <category>Update</category>
    <category>Admin GraphQL API</category>
    <category>2024-10</category>
    <link>https://shopify.dev/changelog/updates-to-shopify-s-standard-product-taxonomy-october-2024</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/updates-to-shopify-s-standard-product-taxonomy-october-2024</guid>
  </item>
  <item>
    <title>GraphQL Over HTTP</title>
    <description><![CDATA[ <div class=""><p>The handling of GraphQL requests via HTTP will evolve slightly as of <code>2025-01</code> API versions in accordance with the <a href="https://graphql.github.io/graphql-over-http" target="_blank" class="body-link">GraphQL over HTTP spec</a>. These changes refine how a request's <code>Content-Type</code> and <code>Accept</code> headers work, and offer additional granularity in response status codes.</p>
<h2>New response format</h2>
<p>A new <code>application/graphql-response+json</code> response format is available. Requests may select this format using the <code>Accept</code> header, for example:</p>
<p><code>Accept: application/graphql-response+json, application/json</code></p>
<p>The above favors receiving a <code>application/graphql-response+json</code> response by listing it first. This new format is the same as JSON aside from its status codes:</p>
<h3><code>200 OK</code></h3>
<ul>
<li>For <code>application/graphql-response+json</code>, this status indicates that the JSON payload was valid and that the submitted GraphQL document <em>attempted</em> execution on the server. Note that the response payload may still contain errors encountered during execution along with partial data.</li>
<li>For <code>application/json</code>, this status only indicates that the JSON payload was valid.</li>
</ul>
<h3><code>400 Bad Request</code></h3>
<ul>
<li>For <code>application/graphql-response+json</code>, this status indicates that the JSON payload was invalid, or that the submitted GraphQL parameters failed static validation and were not executed.</li>
<li>For <code>application/json</code>, this status only indicates that the JSON payload was invalid.</li>
</ul>
<h2>Usage summary</h2>
<p>For requests to <code>2025-01</code> versions and after:</p>
<ul>
<li>Use the <code>/graphql</code> endpoint. Using <code>/graphql.json</code> will automatically respond with <code>application/json</code> as it does now.</li>
<li>The request body must contain a <a href="https://graphql.github.io/graphql-over-http/draft/#sec-JSON-Encoding" target="_blank" class="body-link">spec JSON encoding</a>.</li>
<li>The <code>Content-Type</code> header <em>must</em> specify <code>application/json</code>. The legacy <code>application/graphql</code> request format is no longer supported. Requests with no supported content type will receive a <code>415 Unsupported Media Type</code> response.</li>
<li>The <code>Accept</code> header now supports <code>application/graphql-response+json</code> and/or <code>application/json</code> response formats. Requests with no supported accept types will receive a <code>406 Not Acceptable</code> response.</li>
<li>Accepting <code>*/*</code> will default to a <code>application/graphql-response+json</code> response.</li>
</ul>
<p>These changes do NOT affect <code>unstable</code> versions at this time, or Storefront API. A breaking change announcement with migration timeline will be announced prior to any unstable transition.</p>
</div> ]]></description>
    <pubDate>Fri, 01 Nov 2024 16:00:00 +0000</pubDate>
    <atom:published>2024-11-01T16:00:00.000Z</atom:published>
    <atom:updated>2024-11-01T18:21:07.000Z</atom:updated>
    <category>API</category>
    <category>Update</category>
    <category>Admin GraphQL API</category>
    <category>Customer Account API</category>
    <category>Payments Apps API</category>
    <category>2025-01</category>
    <link>https://shopify.dev/changelog/graphql-over-http</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/graphql-over-http</guid>
  </item>
  <item>
    <title>Content type `application/graphql` is deprecated</title>
    <description><![CDATA[ <div class=""><p>The <code>Content-Type: application/graphql</code> request format is deprecated and will no longer be accepted as of 2025-01 schema versions. As of <code>2025-01</code> schemas, all requests must specify <code>Content-Type: application/json</code> and post a <a href="https://graphql.github.io/graphql-over-http/draft/#sec-JSON-Encoding" target="_blank" class="body-link">spec encoded body</a>. See <a href="https://shopify.dev/changelog/graphql-over-http" target="_blank" class="body-link">GraphQL Over HTTP</a> update for more details.</p>
</div> ]]></description>
    <pubDate>Fri, 01 Nov 2024 15:00:00 +0000</pubDate>
    <atom:published>2024-11-01T15:00:00.000Z</atom:published>
    <atom:updated>2024-11-01T19:11:58.000Z</atom:updated>
    <category>Action Required</category>
    <category>API</category>
    <category>Deprecation announcement</category>
    <category>Admin GraphQL API</category>
    <category>Customer Account API</category>
    <category>Payments Apps API</category>
    <category>2025-01</category>
    <link>https://shopify.dev/changelog/content-type-application-graphql-is-deprecated</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/content-type-application-graphql-is-deprecated</guid>
  </item>
  <item>
    <title>Removing `multiLocation` field from `ShopFeatures`</title>
    <description><![CDATA[ <div class=""><p>As of the <strong>2025-01</strong> release of the Admin GraphQL API, the deprecated <code>multiLocation</code> field on <a href="https://shopify.dev/docs/api/admin-graphql/latest/objects/ShopFeatures" target="_blank" class="body-link">ShopFeatures</a> will be removed.</p>
<p>Use the <a href="https://shopify.dev/docs/api/admin-graphql/latest/queries/locationsCount" target="_blank" class="body-link">locationsCount</a> query to determine how many locations a shop has.</p>
</div> ]]></description>
    <pubDate>Fri, 01 Nov 2024 14:00:00 +0000</pubDate>
    <atom:published>2024-11-01T14:00:00.000Z</atom:published>
    <atom:updated>2024-11-01T14:00:00.000Z</atom:updated>
    <category>Action Required</category>
    <category>API</category>
    <category>Deprecation announcement</category>
    <category>Admin GraphQL API</category>
    <category>2025-01</category>
    <link>https://shopify.dev/changelog/removing-multilocation-field-from-shopfeatures</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/removing-multilocation-field-from-shopfeatures</guid>
  </item>
  <item>
    <title>Merchants can now view your app extension collections </title>
    <description><![CDATA[ <div class=""><p>As of Oct 31, 2024, merchants can now manage their apps using the new Apps tab, which includes app extension collections.</p>
<p>Note: If your app contains customer account UI extensions, these extensions won't be shown to merchants until customer account UI extensions is released in December. </p>
<p>Learn more about the Apps tab in the <a href="https://help.shopify.com/en/manual/checkout-settings/customize-checkout-configurations/checkout-apps#apps-editor" target="_blank" class="body-link">Shopify Help Center</a>.</p>
</div> ]]></description>
    <pubDate>Thu, 31 Oct 2024 14:15:00 +0000</pubDate>
    <atom:published>2024-10-31T14:15:00.000Z</atom:published>
    <atom:updated>2024-10-31T16:22:51.000Z</atom:updated>
    <category>Tools</category>
    <category>Update</category>
    <link>https://shopify.dev/changelog/merchants-can-now-view-your-app-extension-collections</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/merchants-can-now-view-your-app-extension-collections</guid>
  </item>
  <item>
    <title>Metaobject and metaobject_list theme settings now available</title>
    <description><![CDATA[ <div class=""><p>We've added two new theme setting types: <a href="https://shopify.dev/docs/storefronts/themes/architecture/settings/input-settings#metaobject" target="_blank" class="body-link"><code>metaobject</code></a> and <a href="https://shopify.dev/docs/storefronts/themes/architecture/settings/input-settings#metaobject_list" target="_blank" class="body-link"><code>metaobject_list</code></a> so theme and app developers can write sections and blocks that consume <a href="https://shopify.dev/docs/apps/build/custom-data#about-metaobjects" target="_blank" class="body-link">metaobjects</a> of a specified type.</p>
<p>For theme store themes, developers must only use <a href="https://shopify.dev/docs/apps/build/custom-data/metaobjects/list-of-standard-definitions" target="_blank" class="body-link">standard metaobject definitions</a> since custom metaobject definitions are unique to a store. </p>
<p>Learn more about the new <code>metaobject</code> and <code>metaobject_list</code> theme settings on <a href="https://shopify.dev/docs/storefronts/themes/architecture/settings/input-settings#metaobject" target="_blank" class="body-link">Shopify.dev</a>.</p>
</div> ]]></description>
    <pubDate>Wed, 30 Oct 2024 16:01:00 +0000</pubDate>
    <atom:published>2024-10-30T16:01:00.000Z</atom:published>
    <atom:updated>2024-10-30T17:46:53.000Z</atom:updated>
    <category>Themes</category>
    <category>New</category>
    <link>https://shopify.dev/changelog/metaobject-and-metaobject_list-theme-settings-now-available</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/metaobject-and-metaobject_list-theme-settings-now-available</guid>
  </item>
  <item>
    <title>Hydrogen October 2024 release</title>
    <description><![CDATA[ <div class=""><p>Hydrogen v2024.10.0 is out today. The October 2024 Hydrogen release supports the 2024-10 Storefront API and contains several optimizations and bug fixes, including:</p>
<ul>
<li>Cart <code>warnings</code> support (<a href="https://github.com/Shopify/hydrogen/pull/2572" target="_blank" class="body-link">#2572</a>)</li>
<li>Product option updates (<a href="https://github.com/Shopify/hydrogen/pull/2585" target="_blank" class="body-link">#2538</a>)</li>
<li>Hydrogen supports worker compatibility date (<a href="https://github.com/Shopify/hydrogen/pull/2380" target="_blank" class="body-link">#2380</a>)</li>
<li>Shopify cookie banner no longer is the default set up in skeleton (<a href="https://github.com/Shopify/hydrogen/pull/2588" target="_blank" class="body-link">#2588</a>)</li>
<li>Update <code>createWithCache</code> (<a href="https://github.com/Shopify/hydrogen/pull/2546" target="_blank" class="body-link">#2546</a>)</li>
<li>Release stable sitemaps utility functions (<a href="https://github.com/Shopify/hydrogen/pull/2589" target="_blank" class="body-link">#2589</a>)</li>
<li>Decode product variant encoding functions (<a href="https://github.com/Shopify/hydrogen/pull/2425" target="_blank" class="body-link">#2425</a>)</li>
<li>Route warnings (<a href="https://github.com/Shopify/hydrogen/pull/2613" target="_blank" class="body-link">#2613</a>)</li>
<li>Analytics fixes (<a href="https://github.com/Shopify/hydrogen/pull/2538" target="_blank" class="body-link">#2538</a>)</li>
<li>Optimistic cart banner (<a href="https://github.com/Shopify/hydrogen/pull/2502" target="_blank" class="body-link">#2502</a>)</li>
<li>Aside improvements (<a href="https://github.com/Shopify/hydrogen/pull/2503" target="_blank" class="body-link">#2503</a>)</li>
<li>Use datalist for query suggestions (<a href="https://github.com/Shopify/hydrogen/pull/2506" target="_blank" class="body-link">#2506</a>)</li>
<li>Remove unstable re-exports from remix-oxygen package (<a href="https://github.com/Shopify/hydrogen/pull/2551" target="_blank" class="body-link">#2551</a>)</li>
<li>Update MiniOxygen to latest workerd version (<a href="https://github.com/Shopify/hydrogen/pull/2567" target="_blank" class="body-link">#2567</a>)</li>
<li><code>&lt;Image/&gt;</code> local asset fix (<a href="https://github.com/Shopify/hydrogen/pull/2573" target="_blank" class="body-link">#2573</a>)</li>
<li>Update <code>&lt;ProductPrice&gt;</code> to remove deprecated code usage for <code>priceV2</code> and <code>compareAtPriceV2</code>. Remove export for <code>getCustomerprivacy</code> (<a href="https://github.com/Shopify/hydrogen/pull/2601" target="_blank" class="body-link">#2601</a>)</li>
<li>Remove deprecated <code>--worker</code> Shopify CLI flag (<a href="https://github.com/Shopify/hydrogen/pull/2603" target="_blank" class="body-link">#2603</a>)</li>
<li>Allow generated codegen files to be placed anywhere in the directory (<a href="https://github.com/Shopify/hydrogen/pull/2600" target="_blank" class="body-link">#2600</a>)</li>
<li>Add optional headers param for customer logout redirect (<a href="https://github.com/Shopify/hydrogen/pull/2602" target="_blank" class="body-link">#2602</a>)</li>
</ul>
<p>Check out our full <a href="https://hydrogen.shopify.dev/update/october-2024-release-storefront-api-2024-10" target="_blank" class="body-link">Hydrogen October 2024 release blog post</a> for more details. And please drop your comments, feedback, and suggestions in <a href="https://github.com/Shopify/hydrogen/discussions" target="_blank" class="body-link">GitHub Discussions</a>!</p>
</div> ]]></description>
    <pubDate>Wed, 30 Oct 2024 04:45:00 +0000</pubDate>
    <atom:published>2024-10-30T04:45:00.000Z</atom:published>
    <atom:updated>2024-12-13T22:24:41.000Z</atom:updated>
    <category>Platform</category>
    <category>Update</category>
    <category>2024-10</category>
    <link>https://shopify.dev/changelog/hydrogen-october-2024-release</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/hydrogen-october-2024-release</guid>
  </item>
  <item>
    <title>Change to metafield type handling in liquid</title>
    <description><![CDATA[ <div class=""><!-- **IMPORTANT:** Posts won't go live, including at the scheduled date, unless they're reviewed and approved. Due to reduced resources, the dev docs team doesn't have the capacity to review changelog posts at this time. We recommend getting a member of the product team behind the change to do the review. 

Write a summary of the change. Check out the Developer changelog guidelines in the Vault: https://vault.shopify.io/pages/3468-Developer-changelog-posts. You can use markdown or the toolbar inserts to format text.

Here are some suggested formats for writing 2-3 sentences with an overview of the change and how it benefits or affects developers:

As of { API and version }, you can use the {object or resource} to {do something new}.
or
As of { API and version }, we're deprecating { description }. Use the { object or resource } instead.
or
You can now use { thing } to { do something new }.
or
We've added { thing } so that you can { do something }.

Describe any benefits { thing } has, or any action developers need to take and when they need to take it.
 
You can include links inline in the text, and add another link at the end in this format:

Learn more about { thing } on [Shopify.dev](URL).
-->

<p>Effectively immediately, metafields without a <code>type</code> value will return &quot;string&quot; instead of <code>blank</code>. For example, this check will no longer be true</p>
<pre><code class="language-liquid">{% if metafield.type == blank %}
  This will no longer render.
{% endif %}
</code></pre>
<p>Instead, a value of <code>string</code> will be returned:</p>
<pre><code class="language-liquid">{% if metafield.type == 'string' %}
  This metafield is of type `string`.
{% endif %}
</code></pre>
</div> ]]></description>
    <pubDate>Mon, 28 Oct 2024 19:47:00 +0000</pubDate>
    <atom:published>2024-10-28T19:47:00.000Z</atom:published>
    <atom:updated>2024-10-31T15:09:16.000Z</atom:updated>
    <category>Action Required</category>
    <category>Themes</category>
    <category>Update</category>
    <link>https://shopify.dev/changelog/change-to-metafield-type-handling-in-liquid</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/change-to-metafield-type-handling-in-liquid</guid>
  </item>
  <item>
    <title>Updates to Theme Information Access in Shopify</title>
    <description><![CDATA[ <div class=""><p><strong>Action Required:</strong>
Developers currently using the BOOMR variables for theme identification and customization should begin transitioning to <code>window.Shopify.theme</code> properties. The BOOMR variables will be removed on 31/01/2025, after which <code>window.Shopify.theme.schema_name</code> and <code>window.Shopify.theme.schema_version</code> should be used exclusively.</p>
<p><strong>Deprecation of BOOMR Script:</strong>
The BOOMR (Boomerang) JavaScript library was used for collecting Web Performance data on storefronts and it’s now been replaced with a leaner and more conformant library.
Some theme and app developers had been relying on a few variables set by BOOMR. These variables include:</p>
<ul>
<li><code>BOOMR.themeName</code></li>
<li><code>BOOMR.themeVersion</code></li>
</ul>
<p>These variables will continue to be available until 31st Janurary 2025, allowing developers to transition to the new method of accessing theme information.</p>
<p><strong>Introduction of Enhanced Theme Information on window.Shopify.theme:</strong>
In response to developer feedback, we are enhancing the <code>window.Shopify.theme</code> object. Starting today, it will include two new properties:</p>
<ul>
<li><code>schema_name</code>: Reflects the <code>name</code> attribute from the theme's <code>settings_schema.json</code>.</li>
<li><code>schema_version</code>: Reflects the <code>version</code> attribute from the theme's <code>settings_schema.json</code>.</li>
</ul>
<p>These additions aim to provide a standardized and reliable method for accessing theme information directly from the Shopify global object.</p>
</div> ]]></description>
    <pubDate>Mon, 28 Oct 2024 16:47:00 +0000</pubDate>
    <atom:published>2024-10-28T16:47:00.000Z</atom:published>
    <atom:updated>2024-10-30T15:50:50.000Z</atom:updated>
    <category>Action Required</category>
    <category>Themes</category>
    <category>Deprecation announcement</category>
    <category>Liquid</category>
    <link>https://shopify.dev/changelog/updates-to-theme-information-access-in-shopify</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/updates-to-theme-information-access-in-shopify</guid>
  </item>
  <item>
    <title>Web pixels now support checkout error events</title>
    <description><![CDATA[ <div class=""><p>We’re rolling out new standard events to web pixels that enable you to better understand the issues that buyers encounter in checkout. Merchants can now capture specific alerts seen by buyers, such as inline field validations and page-level alerts, and errors from Checkout UI Extensions. Any pixels subscribing to all standard events will automatically receive these new types.</p>
<p>Learn more about the new events <a href="https://shopify.dev/docs/api/web-pixels-api/standard-events" target="_blank" class="body-link">here</a>.</p>
</div> ]]></description>
    <pubDate>Mon, 28 Oct 2024 13:50:00 +0000</pubDate>
    <atom:published>2024-10-28T13:50:00.000Z</atom:published>
    <atom:updated>2024-10-29T13:32:32.000Z</atom:updated>
    <category>API</category>
    <category>Update</category>
    <link>https://shopify.dev/changelog/web-pixels-now-support-checkout-error-events</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/web-pixels-now-support-checkout-error-events</guid>
  </item>
  <item>
    <title>Breaking Changes to CAPTCHA protection on Storefront forms</title>
    <description><![CDATA[ <div class=""><p>From the week commencing 28th October 2024, the following changes to CAPTCHA protection will occur:</p>
<p><strong>Legacy Customer Accounts: Removal of the <code>/challenge</code> page for Login, Create Account and Reset Password flows</strong> </p>
<p>If hCaptcha is enabled in Admin for these forms, they will now require a valid hCaptcha token as part of the form submission, otherwise a 400 error response will be returned.</p>
<p>Form submissions that fail the hCaptcha assessment will also return a 400 error response.</p>
<p>The vast majority of form submissions already comply with this requirement, due to hCaptcha being automatically wired up to forms with the correct markup. More information is available in the <a href="https://shopify.dev/docs/storefronts/themes/trust-security/captcha#how-captcha-is-included-in-themes" target="_blank" class="body-link">dev docs</a></p>
<p><strong>Full deprecation of reCAPTCHA on Storefront forms</strong> </p>
<p>The recent migration to hCaptcha on all Storefront forms is now complete. Applications or themes that have bespoke code that submits a reCAPTCHA v3 token (site key <code>6LeHG2ApAAAAAO4rPaDW-qVpPKPOBfjbCpzJB9ey</code>) will need to update to use hCaptcha. All form submissions containing a <code>recaptcha-v3-token</code> field will result in a 400 error response.</p>
<p>Again, the vast majority of form submissions already comply with this requirement. If you application or theme invokes the reCAPTCHA api directly, ie via methods on <code>window.grecaptcha</code> then you will need to make changes. More information on wiring forms with hCaptcha using methods supported by Shopify is available in the <a href="https://shopify.dev/docs/storefronts/themes/trust-security/captcha#how-captcha-is-included-in-themes" target="_blank" class="body-link">dev docs</a></p>
</div> ]]></description>
    <pubDate>Mon, 28 Oct 2024 04:00:00 +0000</pubDate>
    <atom:published>2024-10-28T04:00:00.000Z</atom:published>
    <atom:updated>2025-01-30T14:22:04.000Z</atom:updated>
    <category>Action Required</category>
    <category>Platform</category>
    <category>Update</category>
    <link>https://shopify.dev/changelog/breaking-changes-to-captcha-protection-on-storefront-forms</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/breaking-changes-to-captcha-protection-on-storefront-forms</guid>
  </item>
  <item>
    <title>Update to `fulfillmentHold.heldByApp` field from `fulfillmentHold.heldBy` field</title>
    <description><![CDATA[ <div class=""><p>As of the <code>2025-01</code> API version, the <code>heldBy</code> string field on the <code>fulfillmentHold</code> GraphQL object will be replaced by the newly introduced <a href="https://shopify.dev/docs/api/admin-graphql/unstable/objects/fulfillmentHold#field-heldbyapp" target="_blank" class="body-link"><code>heldByApp</code></a> object field. </p>
<p>This new field provides access to all attributes of the <a href="https://shopify.dev/docs/api/admin-graphql/2025-01/objects/app" target="_blank" class="body-link">App object</a>, unlike the deprecated <code>heldBy</code> field, which only indicated the app's title.</p>
<p>If you currently query <code>fulfillmentHold.heldBy</code>, you should transition to querying <code>fulfillmentHold.heldByApp.title</code>.</p>
</div> ]]></description>
    <pubDate>Thu, 24 Oct 2024 11:23:00 +0000</pubDate>
    <atom:published>2024-10-24T11:23:00.000Z</atom:published>
    <atom:updated>2024-10-30T09:25:52.000Z</atom:updated>
    <category>Action Required</category>
    <category>API</category>
    <category>Update</category>
    <category>Admin GraphQL API</category>
    <category>2025-01</category>
    <link>https://shopify.dev/changelog/update-to-fulfillmenthold-heldbyapp-field-from-fulfillmenthold-heldby-field</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/update-to-fulfillmenthold-heldbyapp-field-from-fulfillmenthold-heldby-field</guid>
  </item>
  <item>
    <title>Limit for full-page extensions in customer accounts</title>
    <description><![CDATA[ <div class=""><p>A full-page extension target (<code>customer-account.page.render</code> or <code>customer-account.order.page.render</code>) can no longer coexist with any other targets in the same extension. This change improves performance and provides a better merchant experience in the checkout and accounts editor. If your full-page extension is best used with other extensions in your app, create an <a href="https://shopify.dev/docs/apps/build/customer-accounts/editor-extension-collections" target="_blank" class="body-link">editor extension collection</a> to encourage merchants to add all the extensions in the collection.</p>
<p>This change will only impact the deployment of new extensions or new versions of existing extensions. Existing extensions will not be affected until a new version is deployed.</p>
</div> ]]></description>
    <pubDate>Mon, 21 Oct 2024 04:00:00 +0000</pubDate>
    <atom:published>2024-10-21T04:00:00.000Z</atom:published>
    <atom:updated>2024-10-21T13:11:29.000Z</atom:updated>
    <category>API</category>
    <category>Update</category>
    <category>2024-10</category>
    <link>https://shopify.dev/changelog/limit-for-full-page-extensions-in-customer-accounts</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/limit-for-full-page-extensions-in-customer-accounts</guid>
  </item>
  <item>
    <title>Built for Shopify update to grace period for programmatically assessed criteria</title>
    <description><![CDATA[ <div class=""><p>The grace period for the following criteria have been <a href="https://shopify.dev/docs/apps/launch/built-for-shopify/regain-lost-status#criteria" target="_blank" class="body-link">extended to 60 days from the current 30</a>:</p>
<ul>
<li>Minimizes impact on store speed	</li>
<li>Minimizes impact on checkout speed	</li>
<li>Admin performance: meets 75th percentile Web Vitals targets	</li>
<li>Minimum number of installs	</li>
<li>Minimum number of reviews	</li>
<li>Minimum app rating</li>
</ul>
<p>The grace period for <a href="https://shopify.dev/docs/apps/launch/built-for-shopify/category-achievement-criteria#fulfillment-services-apps" target="_blank" class="body-link">Fulfillment services</a> and <a href="https://shopify.dev/docs/apps/launch/built-for-shopify/category-achievement-criteria#carrier-services-apps" target="_blank" class="body-link">Carrier services</a> criteria will also be set to 60 days when enforcement begins.</p>
</div> ]]></description>
    <pubDate>Thu, 17 Oct 2024 19:16:00 +0000</pubDate>
    <atom:published>2024-10-17T19:16:00.000Z</atom:published>
    <atom:updated>2024-12-09T22:53:23.000Z</atom:updated>
    <category>Built for Shopify</category>
    <category>Update</category>
    <link>https://shopify.dev/changelog/built-for-shopify-update-to-grace-period-for-programmatically-assessed-criteria</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/built-for-shopify-update-to-grace-period-for-programmatically-assessed-criteria</guid>
  </item>
  <item>
    <title>Storefront API Cart now supports removing Gift Cards</title>
    <description><![CDATA[ <div class=""><p>As of version 2025-01 of the GraphQL Storefront API, Cart now supports removing Gift Cards by Id.</p>
<p>After a cart has been created and a Gift Card applied - perform the <a href="https://shopify.dev/docs/api/storefront/2025-01/mutations/cartGiftCardCodesRemove" target="_blank" class="body-link"><code>cartGiftCardCodesRemove</code></a> mutation to remove one or more gift cards.</p>
</div> ]]></description>
    <pubDate>Wed, 16 Oct 2024 10:37:00 +0000</pubDate>
    <atom:published>2024-10-16T10:37:00.000Z</atom:published>
    <atom:updated>2024-10-22T08:42:46.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <category>Storefront API</category>
    <category>2025-01</category>
    <link>https://shopify.dev/changelog/storefront-api-cart-now-supports-removing-gift-cards</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/storefront-api-cart-now-supports-removing-gift-cards</guid>
  </item>
  <item>
    <title>Shopify App Store apps require the latest App Bridge</title>
    <description><![CDATA[ <div class=""><p>Starting October 15th, 2025, all Shopify App Store apps that appear in the Shopify admin must use the <a href="https://shopify.dev/docs/api/app-bridge-library#getting-started" target="_blank" class="body-link">latest Shopify App Bridge</a> by adding the <code>app-bridge.js</code> script tag to the <code>&lt;head&gt;</code> of each document of your app.</p>
</div> ]]></description>
    <pubDate>Tue, 15 Oct 2024 17:31:00 +0000</pubDate>
    <atom:published>2024-10-15T17:31:00.000Z</atom:published>
    <atom:updated>2024-10-15T18:16:45.000Z</atom:updated>
    <category>Action Required</category>
    <category>App store</category>
    <category>New</category>
    <link>https://shopify.dev/changelog/shopify-app-store-apps-require-the-latest-app-bridge</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/shopify-app-store-apps-require-the-latest-app-bridge</guid>
  </item>
  <item>
    <title>API `StringConnection` includes `nodes` field</title>
    <description><![CDATA[ <div class=""><p>As of API version <code>2025-01</code>, you can access <code>StringConnection.nodes</code> field shorthand to retrieve an array of strings directly instead of via <code>edges</code>. This connection type is now consistent with other connection types in the schema.</p>
<p>Learn more about <code>StringConnection</code> on <a href="https://shopify.dev/docs/api/admin-graphql/2025-01/connections/StringConnection" target="_blank" class="body-link">GraphQL Admin API</a> and <a href="https://shopify.dev/docs/api/storefront/2025-01/connections/StringConnection" target="_blank" class="body-link">Storefront API</a>.</p>
</div> ]]></description>
    <pubDate>Mon, 14 Oct 2024 21:00:00 +0000</pubDate>
    <atom:published>2024-10-14T21:00:00.000Z</atom:published>
    <atom:updated>2024-10-14T21:00:00.000Z</atom:updated>
    <category>API</category>
    <category>Update</category>
    <category>Admin GraphQL API</category>
    <category>Storefront API</category>
    <category>2024-10</category>
    <link>https://shopify.dev/changelog/api-stringconnection-includes-nodes-field</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/api-stringconnection-includes-nodes-field</guid>
  </item>
  <item>
    <title>Deep link to editor extension collections</title>
    <description><![CDATA[ <div class=""><p>You can now deep link to editor extension collections in the checkout and accounts editor. This is only available on development stores.</p>
<p>When editor extension collections are released to merchants, you can start deep linking to editor extension collections from your app onboarding to streamline the merchant experience.</p>
<p>Learn more on <a href="https://shopify.dev/docs/apps/build/customer-accounts/editor-extension-collections/editor-extension-collections-ux-guidelines#deep-linking-to-a-collection" target="_blank" class="body-link">Shopify.dev</a> </p>
</div> ]]></description>
    <pubDate>Fri, 11 Oct 2024 18:35:00 +0000</pubDate>
    <atom:published>2024-10-11T18:35:00.000Z</atom:published>
    <atom:updated>2024-10-11T18:43:04.000Z</atom:updated>
    <category>Platform</category>
    <category>New</category>
    <link>https://shopify.dev/changelog/deep-link-to-editor-extension-collections</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/deep-link-to-editor-extension-collections</guid>
  </item>
  <item>
    <title>Checkout UI extensions - Extensions in the reductions render before/after targets will now render in the header order summary on 1 page mobile checkouts</title>
    <description><![CDATA[ <div class=""><p>As of October 11, 2024, checkout UI extensions targeting the <code>purchase.checkout.reductions.render-before</code> and <code>purchase.checkout.reductions.render-after</code> extension targets will now render in the order summary at the top of the page for one page mobile checkouts. Previously, extensions in these targets would only appear in the order summary at the bottom of the page. This will apply to checkout UI extensions on all API versions.</p>
<p>For more details, please follow up in the <a href="https://github.com/Shopify/ui-extensions/issues/2218" target="_blank" class="body-link">github issue in our public repo</a></p>
</div> ]]></description>
    <pubDate>Fri, 11 Oct 2024 17:13:00 +0000</pubDate>
    <atom:published>2024-10-11T17:13:00.000Z</atom:published>
    <atom:updated>2024-10-11T18:18:21.000Z</atom:updated>
    <category>API</category>
    <category>Update</category>
    <link>https://shopify.dev/changelog/checkout-ui-extensions-extensions-in-the-reductions-render-before-after-targets-will-now-render-in-the-header-order-summary-on-1-page-mobile-checkouts</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/checkout-ui-extensions-extensions-in-the-reductions-render-before-after-targets-will-now-render-in-the-header-order-summary-on-1-page-mobile-checkouts</guid>
  </item>
  <item>
    <title>Shopify Payments Payout Summary GraphQL surfaces advance fees and advance gross fields</title>
    <description><![CDATA[ <div class=""><!-- **IMPORTANT:** Posts won't go live, including at the scheduled date, unless they're reviewed and approved. Due to reduced resources, the dev docs team doesn't have the capacity to review changelog posts at this time. We recommend getting a member of the product team behind the change to do the review. 

Write a summary of the change. Check out the Developer changelog guidelines in the Vault: https://vault.shopify.io/pages/3468-Developer-changelog-posts. You can use markdown or the toolbar inserts to format text.

Here are some suggested formats for writing 2-3 sentences with an overview of the change and how it benefits or affects developers:

As of { API and version }, you can use the {object or resource} to {do something new}.
or
As of { API and version }, we're deprecating { description }. Use the { object or resource } instead.
or
You can now use { thing } to { do something new }.
or
We've added { thing } so that you can { do something }.

Describe any benefits { thing } has, or any action developers need to take and when they need to take it.
 
You can include links inline in the text, and add another link at the end in this format:

Learn more about { thing } on [Shopify.dev](https://shopify.dev/docs/api/admin-graphql/2024-10/enums/ShopifyPaymentsTransactionType).
-->

<p>As of GraphQL Admin API version <strong>2024-10</strong>, ShopifyPaymentsPayoutSummary now surfaces <code>ADVANCE_FEES</code> and <code>ADVANCE_GROSS</code> fields. </p>
<p>Learn more about <code>ShopifyPaymentsPayoutSummary</code> on <a href="https://shopify.dev/docs/api/admin-graphql/2024-07/objects/ShopifyPaymentsPayoutSummary" target="_blank" class="body-link">Shopify.dev</a>.</p>
</div> ]]></description>
    <pubDate>Thu, 10 Oct 2024 22:00:00 +0000</pubDate>
    <atom:published>2024-10-10T22:00:00.000Z</atom:published>
    <atom:updated>2024-10-10T22:00:00.000Z</atom:updated>
    <category>API</category>
    <category>Update</category>
    <category>Admin GraphQL API</category>
    <category>2024-10</category>
    <link>https://shopify.dev/changelog/shopify-payments-payout-summary-graphql-surfaces-advance-fees-and-advance-gross-fields</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/shopify-payments-payout-summary-graphql-surfaces-advance-fees-and-advance-gross-fields</guid>
  </item>
  <item>
    <title>Shopify Function resource limits now scale with cart size</title>
    <description><![CDATA[ <div class=""><p>Certain Shopify Function resource limits now scale proportionally to the number of line items in the cart. Starting at 200 line items, your Shopify Function runs will be able to use more resources than before. </p>
<p>This change applies to all Shopify Function runs that include cart lines in their input query.</p>
<p>Learn more about dynamic resource limits and how they're calculated for Shopify Functions on <a href="https://shopify.dev/docs/api/functions#resource-limits" target="_blank" class="body-link">Shopify.dev</a>.</p>
</div> ]]></description>
    <pubDate>Thu, 10 Oct 2024 18:54:00 +0000</pubDate>
    <atom:published>2024-10-10T18:54:00.000Z</atom:published>
    <atom:updated>2024-10-16T13:18:24.000Z</atom:updated>
    <category>Platform</category>
    <category>Update</category>
    <link>https://shopify.dev/changelog/shopify-function-resource-limits-now-scale-with-cart-size</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/shopify-function-resource-limits-now-scale-with-cart-size</guid>
  </item>
  <item>
    <title>Install Attributions in Partners Merchant Export</title>
    <description><![CDATA[ <div class=""><p>The merchant export in Partners now provides an &quot;Attribution&quot; column that specifies installs that are attributable to Shopify App Store ad clicks. For more information on the Partners merchant export, <a href="https://shopify.dev/docs/apps/launch/distribution/track-app-usage#view-active-merchant-installs" target="_blank" class="body-link">see here</a></p>
</div> ]]></description>
    <pubDate>Wed, 09 Oct 2024 22:09:00 +0000</pubDate>
    <atom:published>2024-10-09T22:09:00.000Z</atom:published>
    <atom:updated>2024-10-10T00:18:28.000Z</atom:updated>
    <category>App store</category>
    <category>Update</category>
    <link>https://shopify.dev/changelog/install-attributions-in-partners-merchant-export</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/install-attributions-in-partners-merchant-export</guid>
  </item>
  <item>
    <title>`lineItem` connection is no longer deprecated on `FulfillmentOrderLineItem` resource</title>
    <description><![CDATA[ <div class=""><p>As of today, you can use the <code>lineItem</code> on <code>FulfillmentOrderLineItem</code> without planning for deprecation. This applies to all API versions.</p>
<p>Learn more about <code>FulfillmentOrderLineItem.lineItem</code> on <a href="https://shopify.dev/docs/api/admin-graphql/2024-07/objects/FulfillmentOrderLineItem#field-lineitem" target="_blank" class="body-link">Shopify.dev</a>.</p>
</div> ]]></description>
    <pubDate>Mon, 07 Oct 2024 13:56:00 +0000</pubDate>
    <atom:published>2024-10-07T13:56:00.000Z</atom:published>
    <atom:updated>2024-12-13T22:24:41.000Z</atom:updated>
    <category>API</category>
    <category>Deprecation announcement</category>
    <category>Admin GraphQL API</category>
    <category>2024-07</category>
    <link>https://shopify.dev/changelog/lineitem-connection-is-no-longer-deprecated-on-fulfillmentorderlineitem-resource</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/lineitem-connection-is-no-longer-deprecated-on-fulfillmentorderlineitem-resource</guid>
  </item>
  <item>
    <title>Updated CalculateExchangeLineItemInput and CalculatedExchangeLineItem Variant nullability </title>
    <description><![CDATA[ <div class=""><p>As of Admin GraphQL API <code>2025-01</code> version, <code>CalculateExchangeLineItemInput.variantId</code> and <code>CalculatedExchangeLineItem.variant</code> fields are nullable at schema level.</p>
<p>This is in preparation of future feature changes. In the current state <code>CalculateExchangeLineItemInput.variantId</code> will still be validated via a returned error if not present.</p>
<p>Learn more about <a href="https://shopify.dev/docs/api/admin-graphql/unstable/input-objects/CalculateExchangeLineItemInput" target="_blank" class="body-link">CalculateExchangeLineItemInput</a> and <a href="https://shopify.dev/docs/api/admin-graphql/unstable/objects/CalculatedExchangeLineItem" target="_blank" class="body-link">CalculatedExchangeLineItem</a>.</p>
</div> ]]></description>
    <pubDate>Mon, 07 Oct 2024 09:52:00 +0000</pubDate>
    <atom:published>2024-10-07T09:52:00.000Z</atom:published>
    <atom:updated>2024-10-07T09:52:00.000Z</atom:updated>
    <category>API</category>
    <category>Update</category>
    <category>Admin GraphQL API</category>
    <category>2025-01</category>
    <link>https://shopify.dev/changelog/updated-calculateexchangelineiteminput-and-calculatedexchangelineitem-variant-nullability</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/updated-calculateexchangelineiteminput-and-calculatedexchangelineitem-variant-nullability</guid>
  </item>
  <item>
    <title>Add `accountOpenerName` to `shopifyPaymentsAccount`</title>
    <description><![CDATA[ <div class=""><p>As of GraphQL Admin API version 2025-01, the <code>accountOpenerName</code> field will be added to <code>shopifyPaymentsAccount</code></p>
</div> ]]></description>
    <pubDate>Fri, 04 Oct 2024 17:26:00 +0000</pubDate>
    <atom:published>2024-10-04T17:26:00.000Z</atom:published>
    <atom:updated>2024-10-04T17:43:40.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <category>Admin GraphQL API</category>
    <category>2025-01</category>
    <link>https://shopify.dev/changelog/add-accountopenername-to-shopifypaymentsaccount</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/add-accountopenername-to-shopifypaymentsaccount</guid>
  </item>
  <item>
    <title>Bulk query operation userErrors now includes code field</title>
    <description><![CDATA[ <div class=""><p>As of version 2025-01, the <code>userErrors</code> field that is returned by the GraphQL Admin API <a href="https://shopify.dev/docs/api/admin-graphql/latest/mutations/bulkOperationRunMutation" target="_blank" class="body-link"><code>bulkOperationRunMutation</code></a> includes an optional <code>code</code> field. </p>
<p>The GraphQL type for the <code>userErrors</code> field changes from a <code>UserErrors</code> type to a <code>BulkOperationUserError</code> type. However, the <code>userErrors</code> field name remains unchanged.</p>
<pre><code class="language-graphql">mutation bulkOperationRunMutation($clientIdentifier: String, $mutation: String!, $stagedUploadPath: String!) {
  bulkOperationRunMutation(clientIdentifier: $clientIdentifier, mutation: $mutation, stagedUploadPath: $stagedUploadPath) {
    bulkOperation {
      # BulkOperation fields
    }
    userErrors { # Type is now BulkOperationUserError instead of UserErrors
      field
      message
      code # New field added in 2025-01
    }
  }
}
</code></pre>
<p>This shows the changes to the GraphQL <code>type</code> that is used for the <code>userErrors</code> field above:</p>
<pre><code># Before (pre-2025-01)
type UserErrors {
  field: String
  message: String
}

# After (2025-01+)
type BulkOperationUserError {
  field: String
  message: String
  code: String  # New optional field
}
</code></pre>
<p>The query syntax remains unchanged despite the type change.</p>
</div> ]]></description>
    <pubDate>Wed, 02 Oct 2024 13:02:00 +0000</pubDate>
    <atom:published>2024-10-02T13:02:00.000Z</atom:published>
    <atom:updated>2025-10-03T20:02:38.000Z</atom:updated>
    <category>API</category>
    <category>Update</category>
    <category>Admin GraphQL API</category>
    <category>2025-01</category>
    <link>https://shopify.dev/changelog/bulk-query-operation-usererrors-now-includes-code-field</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/bulk-query-operation-usererrors-now-includes-code-field</guid>
  </item>
  <item>
    <title>Shopify Payments Balance Transaction GraphQL type supports advance and advance funding type</title>
    <description><![CDATA[ <div class=""><!-- **IMPORTANT:** Posts won't go live, including at the scheduled date, unless they're reviewed and approved. Due to reduced resources, the dev docs team doesn't have the capacity to review changelog posts at this time. We recommend getting a member of the product team behind the change to do the review. 

Write a summary of the change. Check out the Developer changelog guidelines in the Vault: https://vault.shopify.io/pages/3468-Developer-changelog-posts. You can use markdown or the toolbar inserts to format text.

Here are some suggested formats for writing 2-3 sentences with an overview of the change and how it benefits or affects developers:

As of { API and version }, you can use the {object or resource} to {do something new}.
or
As of { API and version }, we're deprecating { description }. Use the { object or resource } instead.
or
You can now use { thing } to { do something new }.
or
We've added { thing } so that you can { do something }.

Describe any benefits { thing } has, or any action developers need to take and when they need to take it.
 
You can include links inline in the text, and add another link at the end in this format:

Learn more about { thing } on [Shopify.dev](https://shopify.dev/docs/api/admin-graphql/2024-10/enums/ShopifyPaymentsTransactionType).
-->

<p>As of GraphQL Admin API version <strong>2024-10</strong>, ShopifyPaymentsTransactionType now includes <code>ADVANCE</code> and <code>ADVANCE_FUNDING</code> type. </p>
<p>Learn more about <code>ShopifyPaymentsTransactionType</code> on <a href="https://shopify.dev/docs/api/admin-graphql/2024-10/enums/ShopifyPaymentsTransactionType" target="_blank" class="body-link">Shopify.dev</a>.</p>
</div> ]]></description>
    <pubDate>Tue, 01 Oct 2024 22:00:00 +0000</pubDate>
    <atom:published>2024-10-01T22:00:00.000Z</atom:published>
    <atom:updated>2024-10-01T22:00:00.000Z</atom:updated>
    <category>API</category>
    <category>Update</category>
    <category>Admin GraphQL API</category>
    <category>2024-10</category>
    <link>https://shopify.dev/changelog/shopify-payments-balance-transaction-graphql-type-supports-advance-and-advance-funding-type</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/shopify-payments-balance-transaction-graphql-type-supports-advance-and-advance-funding-type</guid>
  </item>
  <item>
    <title>Shopify Payments GraphQL Admin API supports querying a list of disputes</title>
    <description><![CDATA[ <div class=""><!-- **IMPORTANT:** Posts won't go live, including at the scheduled date, unless they're reviewed and approved. Due to reduced resources, the dev docs team doesn't have the capacity to review changelog posts at this time. We recommend getting a member of the product team behind the change to do the review. 

Write a summary of the change. Check out the Developer changelog guidelines in the Vault: https://vault.shopify.io/pages/3468-Developer-changelog-posts. You can use markdown or the toolbar inserts to format text.

Here are some suggested formats for writing 2-3 sentences with an overview of the change and how it benefits or affects developers:

As of { API and version }, you can use the {object or resource} to {do something new}.
or
As of { API and version }, we're deprecating { description }. Use the { object or resource } instead.
or
You can now use { thing } to { do something new }.
or
We've added { thing } so that you can { do something }.

Describe any benefits { thing } has, or any action developers need to take and when they need to take it.
 
You can include links inline in the text, and add another link at the end in this format:

Learn more about { thing } on [Shopify.dev](URL).
-->

<p>As of GraphQL Admin API version <strong>2024-10</strong>, querying for all disputes for a given shop will be available for use as a GraphQL connection. </p>
<p>Learn more about <code>ShopifyPaymentsDispute</code> on <a href="https://shopify.dev/docs/api/admin-graphql/2024-07/objects/ShopifyPaymentsDispute" target="_blank" class="body-link">Shopify.dev</a></p>
</div> ]]></description>
    <pubDate>Tue, 01 Oct 2024 21:57:00 +0000</pubDate>
    <atom:published>2024-10-01T21:57:00.000Z</atom:published>
    <atom:updated>2024-10-01T21:57:00.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <category>Admin GraphQL API</category>
    <category>2024-10</category>
    <link>https://shopify.dev/changelog/shopify-payments-graphql-admin-api-supports-querying-a-list-of-disputes</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/shopify-payments-graphql-admin-api-supports-querying-a-list-of-disputes</guid>
  </item>
  <item>
    <title>Exposing Business Entity fields on Admin API</title>
    <description><![CDATA[ <div class=""><!-- **IMPORTANT:** Posts won't go live, including at the scheduled date, unless they're reviewed and approved. Due to reduced resources, the dev docs team doesn't have the capacity to review changelog posts at this time. We recommend getting a member of the product team behind the change to do the review. 

Write a summary of the change. Check out the Developer changelog guidelines in the Vault: https://vault.shopify.io/pages/3468-Developer-changelog-posts. You can use markdown or the toolbar inserts to format text.

Here are some suggested formats for writing 2-3 sentences with an overview of the change and how it benefits or affects developers:

As of { API and version }, you can use the {object or resource} to {do something new}.
or
As of { API and version }, we're deprecating { description }. Use the { object or resource } instead.
or
You can now use { thing } to { do something new }.
or
We've added { thing } so that you can { do something }.

Describe any benefits { thing } has, or any action developers need to take and when they need to take it.
 
You can include links inline in the text, and add another link at the end in this format:

Learn more about { thing } on [Shopify.dev](URL).
-->

<p>As of GraphQL Admin API version <strong>2024-10</strong>, Business Entity attributes will be available for use as a GraphQL object and across relevant types.</p>
<p>You will now be able to query for properties related to the Business Entities that are enabled on your shop and request for these fields on objects that can be associated to a Business Entity.</p>
<p>Business Entity identifiers will also be available on the Order REST Admin API version <strong>2024-10</strong> as well as on webhook payloads.</p>
</div> ]]></description>
    <pubDate>Tue, 01 Oct 2024 21:57:00 +0000</pubDate>
    <atom:published>2024-10-01T21:57:00.000Z</atom:published>
    <atom:updated>2024-10-01T21:57:00.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <category>Admin GraphQL API</category>
    <category>Admin REST API</category>
    <category>Storefront API</category>
    <category>2024-10</category>
    <link>https://shopify.dev/changelog/exposing-business-entity-fields-on-admin-api</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/exposing-business-entity-fields-on-admin-api</guid>
  </item>
  <item>
    <title>Added `variant_strategy` for `productOptionsCreate`</title>
    <description><![CDATA[ <div class=""><p>In the version 2024-10 release of the Admin GraphQL API, the <code>productOptionsCreate</code> mutation will include a <code>variantStrategy</code> parameter, enhancing control over variant management when adding new product options. This new parameter allows for two strategies:</p>
<ul>
<li><code>LEAVE_AS_IS</code>: Maintains existing variants, updating them to include new option values without creating new variants as necessary.</li>
<li><code>CREATE</code>: Generates new variants for all possible combinations of option values.
This enhancement allows for more precise control over product variant configuration and inventory management.</li>
</ul>
<p>For more detailed information and examples, visit our <a href="https://shopify.dev/docs/api/admin-graphql/2024-10/mutations/productOptionsCreate" target="_blank" class="body-link">productOptionsCreate documentation</a> on Shopify.dev.</p>
</div> ]]></description>
    <pubDate>Tue, 01 Oct 2024 21:13:00 +0000</pubDate>
    <atom:published>2024-10-01T21:13:00.000Z</atom:published>
    <atom:updated>2024-10-01T21:13:00.000Z</atom:updated>
    <category>API</category>
    <category>Update</category>
    <category>Admin GraphQL API</category>
    <category>2024-10</category>
    <link>https://shopify.dev/changelog/added-variant_strategy-for-productoptionscreate</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/added-variant_strategy-for-productoptionscreate</guid>
  </item>
  <item>
    <title>Adding `requiresComponents` field to `ProductVariantsBulkInput`</title>
    <description><![CDATA[ <div class=""><p>As of the 2024-10 version of the GraphQL Admin API, the <code>requiresComponents</code> field available in <code>ProductVariantInput</code> has been added to <code>ProductVariantsBulkInput</code>.</p>
<p>This field allows variants to be marked as bundles that require components in order to be sold.</p>
<p>Learn more about <code>requiresComponents</code> and <code>ProductVariantsBulkInput</code> on <a href="https://shopify.dev/docs/api/admin-graphql/unstable/input-objects/ProductVariantsBulkInput" target="_blank" class="body-link">Shopify.dev</a>.</p>
</div> ]]></description>
    <pubDate>Tue, 01 Oct 2024 20:18:00 +0000</pubDate>
    <atom:published>2024-10-01T20:18:00.000Z</atom:published>
    <atom:updated>2024-10-21T16:38:42.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <category>Admin GraphQL API</category>
    <category>2024-10</category>
    <link>https://shopify.dev/changelog/adding-requirescomponents-field-to-productvariantsbulkinput</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/adding-requirescomponents-field-to-productvariantsbulkinput</guid>
  </item>
  <item>
    <title>New `CollectionsCount` query in the GraphQL Admin API</title>
    <description><![CDATA[ <div class=""><p>As of <code>2024-10</code> version, we are adding <code>CollectionsCount</code> query to the Admin GraphQL API. </p>
<p>Learn more about <a href="https://shopify.dev/docs/api/admin-graphql/2024-10/queries/CollectionsCount" target="_blank" class="body-link">CollectionsCount</a> on <a href="https://shopify.dev/" target="_blank" class="body-link">Shopify.dev</a>.</p>
</div> ]]></description>
    <pubDate>Tue, 01 Oct 2024 18:55:00 +0000</pubDate>
    <atom:published>2024-10-01T18:55:00.000Z</atom:published>
    <atom:updated>2024-10-01T18:55:00.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <category>Admin GraphQL API</category>
    <category>2024-10</category>
    <link>https://shopify.dev/changelog/new-collectionscount-query-in-the-graphql-admin-api</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/new-collectionscount-query-in-the-graphql-admin-api</guid>
  </item>
  <item>
    <title>Metafield Definition Webhooks</title>
    <description><![CDATA[ <div class=""><p>As of GraphQL Admin API Version 2024-10, you can subscribe to MetafieldDefinition changes under the webhook topics <code>metafield_definitions/create</code>, <code>metafield_definitions/update</code>, and <code>metafield_definitions/delete</code></p>
</div> ]]></description>
    <pubDate>Tue, 01 Oct 2024 18:47:00 +0000</pubDate>
    <atom:published>2024-10-01T18:47:00.000Z</atom:published>
    <atom:updated>2024-10-11T19:14:04.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <category>Admin GraphQL API</category>
    <category>Events &amp; webhooks</category>
    <category>2024-10</category>
    <link>https://shopify.dev/changelog/metafield-definition-webhooks</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/metafield-definition-webhooks</guid>
  </item>
  <item>
    <title>Starting April 2025, new public apps submitted to Shopify app store must use GraphQL</title>
    <description><![CDATA[ <div class=""><p>GraphQL is now the primary API to interact with the Shopify admin. REST Admin API will be marked as legacy, and new feature development and improvements will be focused on GraphQL.</p>
<p><strong>Starting April 1 2025, all new public apps submitted to the App Store after this date must only use GraphQL.</strong></p>
<p>Migration timelines for existing apps (outside of <a href="https://shopify.dev/changelog/deprecation-timelines-related-to-new-graphql-product-apis" target="_blank" class="body-link">the required migration to the new GraphQL product APIs that have already been announced</a>), will be announced in 2025.  We will make sure ample time is provided for a smooth transition.</p>
<p><a href="https://www.shopify.com/ca/partners/blog/all-in-on-graphql" target="_blank" class="body-link">Learn more</a> about Shopify’s API strategy and direction into GraphQL. </p>
</div> ]]></description>
    <pubDate>Tue, 01 Oct 2024 18:45:00 +0000</pubDate>
    <atom:published>2024-10-01T18:45:00.000Z</atom:published>
    <atom:updated>2025-03-27T21:45:21.000Z</atom:updated>
    <category>Action Required</category>
    <category>Tools</category>
    <category>Deprecation announcement</category>
    <link>https://shopify.dev/changelog/starting-april-2025-new-public-apps-submitted-to-shopify-app-store-must-use-graphql</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/starting-april-2025-new-public-apps-submitted-to-shopify-app-store-must-use-graphql</guid>
  </item>
  <item>
    <title>Theme Store ranking update</title>
    <description><![CDATA[ <div class=""><p>As of October 1st, 2024 we have update the Theme Store algorithm. This new ranking system will refine how themes are discovered, prioritizing factors like recency, quality, and trust signals to help merchants find themes more effectively. </p>
</div> ]]></description>
    <pubDate>Tue, 01 Oct 2024 18:36:00 +0000</pubDate>
    <atom:published>2024-10-01T18:36:00.000Z</atom:published>
    <atom:updated>2024-12-04T15:57:21.000Z</atom:updated>
    <category>Shopify Theme Store</category>
    <category>Update</category>
    <category>2024-10</category>
    <link>https://shopify.dev/changelog/theme-store-ranking-update</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/theme-store-ranking-update</guid>
  </item>
  <item>
    <title>ShopifyPaymentsBankAccount GraphQL Admin API unused fields removed</title>
    <description><![CDATA[ <div class=""><p>As of GraphQL Admin API version 2025-01, we're cleaning up the <code>shopifyPaymentsBankAccount</code> endpoint and removing several unused fields.</p>
</div> ]]></description>
    <pubDate>Tue, 01 Oct 2024 18:30:00 +0000</pubDate>
    <atom:published>2024-10-01T18:30:00.000Z</atom:published>
    <atom:updated>2024-10-01T18:30:00.000Z</atom:updated>
    <category>API</category>
    <category>Update</category>
    <category>Admin GraphQL API</category>
    <category>2025-01</category>
    <link>https://shopify.dev/changelog/shopifypaymentsbankaccount-graphql-admin-api-unused-fields-removed</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/shopifypaymentsbankaccount-graphql-admin-api-unused-fields-removed</guid>
  </item>
  <item>
    <title>Storefront API support for Combined Listings</title>
    <description><![CDATA[ <div class=""><p>Merchants using the Storefront API can now offer Combined Listings with Shopify. The <a href="https://apps.shopify.com/combined-listings" target="_blank" class="body-link">Shopify Combined Listings app</a> is available to merchants on Plus plans, helping merchants better merchandise products that come in multiple variations such as colors, materials or lengths, all from the same product listing. </p>
<p>Learn more about the Shopify Combined Listings app in the <a href="https://help.shopify.com/manual/products/combined-listings" target="_blank" class="body-link">Shopify Help Center</a>.</p>
</div> ]]></description>
    <pubDate>Tue, 01 Oct 2024 16:00:00 +0000</pubDate>
    <atom:published>2024-10-01T16:00:00.000Z</atom:published>
    <atom:updated>2024-10-01T21:36:01.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <category>Storefront API</category>
    <category>2024-10</category>
    <link>https://shopify.dev/changelog/storefront-api-support-for-combined-listings</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/storefront-api-support-for-combined-listings</guid>
  </item>
  <item>
    <title>Added new field `recurring_cycle_limit` and `applies_on_subscription` to DiscountAutomaticApp and DiscountAutomaticAppInput</title>
    <description><![CDATA[ <div class=""><p>As of <code>2024-10</code>, you can use the <code>recurring_cycle_limit</code> and <code>applies_on_subscription</code> field on the <a href="https://shopify.dev/docs/api/admin-graphql/2024-10/objects/DiscountAutomaticApp" target="_blank" class="body-link">DiscountAutomaticApp</a> object type so that subscriptions can use function based discounts for a specified number of occurrences</p>
<p>Learn more about <code>DiscountAutomaticApp</code> on <a href="https://shopify.dev/docs/api/admin-graphql/unstable/objects/DiscountAutomaticAppt" target="_blank" class="body-link">Shopify.dev</a>.</p>
</div> ]]></description>
    <pubDate>Tue, 01 Oct 2024 15:58:00 +0000</pubDate>
    <atom:published>2024-10-01T15:58:00.000Z</atom:published>
    <atom:updated>2024-12-13T22:24:41.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <category>Admin GraphQL API</category>
    <category>2024-10</category>
    <link>https://shopify.dev/changelog/added-new-field-recurring_cycle_limit-and-applies_on_subscription-to-discountautomaticapp-and-discountautomaticappinput</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/added-new-field-recurring_cycle_limit-and-applies_on_subscription-to-discountautomaticapp-and-discountautomaticappinput</guid>
  </item>
  <item>
    <title>New `has_variants_that_requires_components` field on Product Webhooks</title>
    <description><![CDATA[ <div class=""><p>As of 2024-10, the product create and update webhook payloads contain information indicating if the product has a variant that is a product bundle.</p>
<p>The new boolean field, <code>has_variants_that_requires_components</code>, mirrors what is already available on the Product GraphQL <a href="https://shopify.dev/docs/api/admin-graphql/2024-04/objects/Product#field-product-hasvariantsthatrequirescomponents" target="_blank" class="body-link">response</a>.</p>
<p>To receive <code>has_variants_that_requires_components</code> in the webhook payload, specify 2024-10 or greater as the webhook API version in your <a href="https://shopify.dev/docs/apps/build/webhooks/subscribe/use-newer-api-version#step-3-select-the-newer-api-version" target="_blank" class="body-link">App Partner Dashboard</a>.</p>
<p>Learn more about <a href="https://shopify.dev/docs/apps/build/product-merchandising/bundles" target="_blank" class="body-link">Product Bundles</a>.</p>
</div> ]]></description>
    <pubDate>Tue, 01 Oct 2024 15:38:00 +0000</pubDate>
    <atom:published>2024-10-01T15:38:00.000Z</atom:published>
    <atom:updated>2024-10-01T15:38:00.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <category>Admin GraphQL API</category>
    <category>Admin REST API</category>
    <category>2024-10</category>
    <link>https://shopify.dev/changelog/new-has_variants_that_requires_components-field-on-product-webhooks</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/new-has_variants_that_requires_components-field-on-product-webhooks</guid>
  </item>
  <item>
    <title>New field and queries for the `StaffMember` object in the GraphQL Admin API</title>
    <description><![CDATA[ <div class=""><p>The <code>2024-10</code> version of the GraphQL  Admin API brings improvements to the <a href="https://shopify.dev/docs/api/admin-graphql/latest/objects/StaffMember" target="_blank" class="body-link"><code>StaffMember</code></a> object:</p>
<ul>
<li>New <a href="https://shopify.dev/docs/api/admin-graphql/2024-10/objects/StaffMember#field-accounttype" target="_blank" class="body-link"><code>accountType</code> field</a>.</li>
<li>You can retrieve the staff member making the API request with the <a href="https://shopify.dev/docs/api/admin-graphql/2024-10/queries/currentStaffMember" target="_blank" class="body-link"><code>currentStaffMember</code> query</a>.</li>
<li>You can list all staff members with the <a href="https://shopify.dev/docs/api/admin-graphql/2024-10/queries/staffMembers" target="_blank" class="body-link"><code>staffMembers</code> connection query</a>.</li>
<li><a href="https://shopify.dev/docs/api/admin-graphql/latest/objects/Shop#connection-staffmembers" target="_blank" class="body-link"><code>Shop.staffMembers</code></a> was deprecated in favor of the <code>staffMembers</code> query.</li>
</ul>
<p>This allows apps using the <a href="https://shopify.dev/docs/api/admin-rest/latest/resources/user" target="_blank" class="body-link"><code>User</code></a> REST Admin API resource to migrate to GraphQL's <a href="https://shopify.dev/docs/api/admin-graphql/latest/objects/StaffMember" target="_blank" class="body-link"><code>StaffMember</code></a> object. </p>
</div> ]]></description>
    <pubDate>Tue, 01 Oct 2024 15:00:00 +0000</pubDate>
    <atom:published>2024-10-01T15:00:00.000Z</atom:published>
    <atom:updated>2024-10-01T15:00:00.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <category>Admin GraphQL API</category>
    <category>2024-10</category>
    <link>https://shopify.dev/changelog/new-field-and-queries-for-the-staffmember-object-in-the-graphql-admin-api</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/new-field-and-queries-for-the-staffmember-object-in-the-graphql-admin-api</guid>
  </item>
  <item>
    <title>Removal fulfillment service shipping method</title>
    <description><![CDATA[ <div class=""><p>As of 2024-10, you can no longer use the deprecated <code>shippingMethods</code> field on the <code>fulfillmentService</code> query or include it as an argument in the <code>fulfillmentOrderSubmitFulfillmentRequest mutation</code>.</p>
<p>The shipping method associated with the fulfillment service provider applied only to Fulfill By Amazon fulfillment service. The Fulfillment by Amazon feature is not supported as of March 30, 2023. To continue using Amazon fulfillment, merchants need to set up a Multi-Channel Fulfillment solution recommended by Amazon. </p>
<p>To learn more see <a href="https://help.shopify.com/manual/shipping/fulfillment-services/amazon#activate-fulfillment-by-amazon" target="_blank" class="body-link">https://help.shopify.com/manual/shipping/fulfillment-services/amazon#activate-fulfillment-by-amazon</a></p>
</div> ]]></description>
    <pubDate>Tue, 01 Oct 2024 14:26:00 +0000</pubDate>
    <atom:published>2024-10-01T14:26:00.000Z</atom:published>
    <atom:updated>2024-10-01T14:26:00.000Z</atom:updated>
    <category>Action Required</category>
    <category>API</category>
    <category>Deprecation announcement</category>
    <category>Admin GraphQL API</category>
    <category>2024-10</category>
    <link>https://shopify.dev/changelog/removal-fulfillment-service-shipping-method</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/removal-fulfillment-service-shipping-method</guid>
  </item>
  <item>
    <title>POS UI Extensions 2024-10 Update</title>
    <description><![CDATA[ <div class=""><p>As of October 1, we added the following updates to POS UI Extensions: </p>
<ul>
<li>Added support for iOS debugging with the Safari dev tools.</li>
<li>Added support for the <code>pos.product-details.block.render</code> target.</li>
<li>Added support for the <code>pos.purchase.post.block.render</code> target.</li>
<li>Added support for the <code>pos.order-details.block.render</code> target.</li>
<li>Added support for the <code>pos.customer-details.block.render</code> target.</li>
<li>Introduced a <code>POSBlock</code> component. It's the required parent component for block extension targets.</li>
<li>Introduced a <code>POSBlockRow</code> component. It's the required child component for <code>POSBlock</code>, and can be used to wrap other components.</li>
<li>Deprecated the <code>ActionItem</code> component. Please use the <code>Button</code> component instead.</li>
<li>Added support for windowed modals.</li>
</ul>
<p>All of the changes are available for POS UI extensions version 2024-10 and POS app version 9.19.0. See the <a href="https://shopify.dev/docs/api/pos-ui-extensions/unstable/versions" target="_blank" class="body-link">version log</a> for all version details.</p>
</div> ]]></description>
    <pubDate>Tue, 01 Oct 2024 14:00:00 +0000</pubDate>
    <atom:published>2024-10-01T14:00:00.000Z</atom:published>
    <atom:updated>2024-10-02T00:43:47.000Z</atom:updated>
    <category>API</category>
    <category>Update</category>
    <category>2024-10</category>
    <link>https://shopify.dev/changelog/pos-ui-extensions-2024-10-update</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/pos-ui-extensions-2024-10-update</guid>
  </item>
  <item>
    <title>New mutation to create an order</title>
    <description><![CDATA[ <div class=""><p>As of GraphQL Admin API 2024-10 version, you can make use of a new mutation to create an order.</p>
<p>Learn more about <code>orderCreate</code> on <a href="https://shopify.dev/docs/api/admin-graphql/2024-10/mutations/orderCreate" target="_blank" class="body-link">Shopify.dev</a>.</p>
</div> ]]></description>
    <pubDate>Tue, 01 Oct 2024 14:00:00 +0000</pubDate>
    <atom:published>2024-10-01T14:00:00.000Z</atom:published>
    <atom:updated>2024-10-01T14:00:00.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <category>Admin GraphQL API</category>
    <category>2024-10</category>
    <link>https://shopify.dev/changelog/new-mutation-to-create-an-order</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/new-mutation-to-create-an-order</guid>
  </item>
  <item>
    <title>Admin API update on `fulfillmentOrder.destination` and `FulfillmentOrderDestination` object</title>
    <description><![CDATA[ <div class=""><h3>Breaking Changes</h3>
<p>As of the Admin API version <strong>2024-10</strong> and <strong>unstable</strong> release, <code>fulfillmentOrder.destination</code> will return a <code>FulfillmentOrderDestination</code> object instead of <code>null</code> for fulfillment orders lacking an associated shipping address. In such cases, the address related fields within the <code>FulfillmentOrderDestination</code> object will be set to null.</p>
<h3>Non Breaking Changes</h3>
<p>As of GQL Admin API version <strong>2024-10</strong> and <strong>unstable</strong> release, you can use new field <code>fulfillmentOrder.destination.location</code> to retrieve the pickup location for the fulfillment order.</p>
<p>You can learn more about <code>fulfillmentOrder.destination</code> <a href="https://shopify.dev/docs/api/admin-graphql/2024-10/objects/FulfillmentOrder#field-destination" target="_blank" class="body-link">here</a> and <code>fulfillmentOrderDestination</code> <a href="https://shopify.dev/docs/api/admin-graphql/2024-10/objects/FulfillmentOrderDestination" target="_blank" class="body-link">here</a></p>
</div> ]]></description>
    <pubDate>Tue, 01 Oct 2024 13:30:00 +0000</pubDate>
    <atom:published>2024-10-01T13:30:00.000Z</atom:published>
    <atom:updated>2024-10-01T13:30:00.000Z</atom:updated>
    <category>API</category>
    <category>Update</category>
    <category>Admin GraphQL API</category>
    <category>2024-10</category>
    <link>https://shopify.dev/changelog/admin-api-update-on-fulfillmentorder-destination-and-fulfillmentorderdestination-object</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/admin-api-update-on-fulfillmentorder-destination-and-fulfillmentorderdestination-object</guid>
  </item>
  <item>
    <title>Fulfillment Constraints now support Local Pickup</title>
    <description><![CDATA[ <div class=""><p>As of Admin GraphQL API version <code>2024-10</code> and <code>unstable</code>, you can setup your <a href="https://shopify.dev/docs/api/functions/reference/fulfillment-constraints" target="_blank" class="body-link">Fulfillment Constraint</a> function to run for Local Pickup delivery method.</p>
<p>Use the <a href="https://shopify.dev/docs/api/admin-graphql/unstable/mutations/fulfillmentConstraintRuleCreate" target="_blank" class="body-link">FulfillmentConstraintRuleCreate</a> mutation to register your new Fulfillment Constraint function with the <code>PICK_UP</code> delivery method.</p>
<p>Or, use the <a href="https://shopify.dev/docs/api/admin-graphql/unstable/mutations/fulfillmentConstraintRuleUpdate" target="_blank" class="body-link">FulfillmentConstraintRuleUpdate</a> mutation to update your existing registered function to include <code>PICK_UP</code>.</p>
</div> ]]></description>
    <pubDate>Tue, 01 Oct 2024 13:30:00 +0000</pubDate>
    <atom:published>2024-10-01T13:30:00.000Z</atom:published>
    <atom:updated>2024-10-01T13:30:00.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <category>Admin GraphQL API</category>
    <category>2024-10</category>
    <link>https://shopify.dev/changelog/fulfillment-constraints-now-support-local-pickup</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/fulfillment-constraints-now-support-local-pickup</guid>
  </item>
  <item>
    <title>Fulfillment Constraints can now be associated with one or multiple delivery methods</title>
    <description><![CDATA[ <div class=""><p>You can now associate a <a href="https://shopify.dev/docs/api/functions/reference/fulfillment-constraints" target="_blank" class="body-link">Fulfillment Constraint</a> function with one or multiple <a href="https://shopify.dev/docs/api/admin-graphql/unstable/enums/DeliveryMethodType" target="_blank" class="body-link">delivery method types</a>. The function will only run within the context of those specific delivery methods.</p>
<p>As of Admin GraphQL API version <code>2024-10</code> and <code>unstable</code>, you can</p>
<ul>
<li>Use the <a href="https://shopify.dev/docs/api/admin-graphql/unstable/mutations/fulfillmentConstraintRuleCreate" target="_blank" class="body-link">FulfillmentConstraintRuleCreate</a> mutation to register your new Fulfillment Constraint function and associate it with one or multiple delivery methods. A new required input field <code>delivery_method_types</code> will be added.</li>
<li>Use the <a href="https://shopify.dev/docs/api/admin-graphql/unstable/mutations/fulfillmentConstraintRuleUpdate" target="_blank" class="body-link">FulfillmentConstraintRuleUpdate</a> mutation to update delivery method(s) for an existing registered function.</li>
</ul>
<p>Existing fulfillment constraint functions will continue to run for <code>SHIPPING</code>, <code>LOCAL</code> and <code>PICKUP_POINT</code>.</p>
</div> ]]></description>
    <pubDate>Tue, 01 Oct 2024 13:30:00 +0000</pubDate>
    <atom:published>2024-10-01T13:30:00.000Z</atom:published>
    <atom:updated>2024-10-01T13:30:00.000Z</atom:updated>
    <category>Action Required</category>
    <category>API</category>
    <category>Update</category>
    <category>Admin GraphQL API</category>
    <category>2024-10</category>
    <link>https://shopify.dev/changelog/fulfillment-constraints-can-now-be-associated-with-one-or-multiple-delivery-methods</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/fulfillment-constraints-can-now-be-associated-with-one-or-multiple-delivery-methods</guid>
  </item>
  <item>
    <title>Admin API includes `discountNodesCount`</title>
    <description><![CDATA[ <div class=""><!-- **IMPORTANT:** Posts won't go live, including at the scheduled date, unless they're reviewed and approved. Due to reduced resources, the dev docs team doesn't have the capacity to review changelog posts at this time. We recommend getting a member of the product team behind the change to do the review. 

Write a summary of the change. Check out the Developer changelog guidelines in the Vault: https://vault.shopify.io/pages/3468-Developer-changelog-posts. You can use markdown or the toolbar inserts to format text.

Here are some suggested formats for writing 2-3 sentences with an overview of the change and how it benefits or affects developers:

As of { API and version }, you can use the {object or resource} to {do something new}.
or
As of { API and version }, we're deprecating { description }. Use the { object or resource } instead.
or
You can now use { thing } to { do something new }.
or
We've added { thing } so that you can { do something }.

Describe any benefits { thing } has, or any action developers need to take and when they need to take it.
 
You can include links inline in the text, and add another link at the end in this format:

Learn more about { thing } on [Shopify.dev](URL).
-->

<p>As of Admin GraphQL API version <code>2024-10</code>, you can access the <code>QueryRoot.discountNodesCount</code> field to retrieve the total count of discounts in the shop.</p>
<p>Learn more about <code>discountNodesCount</code> on <a href="https://shopify.dev/docs/api/admin-graphql/2024-10/queries/discountNodesCount" target="_blank" class="body-link">Shopify.dev</a>.</p>
</div> ]]></description>
    <pubDate>Tue, 01 Oct 2024 13:00:00 +0000</pubDate>
    <atom:published>2024-10-01T13:00:00.000Z</atom:published>
    <atom:updated>2024-10-01T13:00:00.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <category>Admin GraphQL API</category>
    <category>2024-10</category>
    <link>https://shopify.dev/changelog/admin-api-includes-discountnodescount</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/admin-api-includes-discountnodescount</guid>
  </item>
  <item>
    <title>Introducing Session ID to StartPaymentSession</title>
    <description><![CDATA[ <div class=""><p>As of Payments Apps API version 2024-10, the StartPaymentSession payload for all payment extension types will have one new field: <a href="https://shopify.dev/docs/apps/build/payments/request-reference#request-body" target="_blank" class="body-link">session_id</a>.</p>
<p>This identifier is shared across payment sessions that belong to the same payment group, buyer session, and share payment details. It can be used to power auth rate calculations.</p>
</div> ]]></description>
    <pubDate>Tue, 01 Oct 2024 13:00:00 +0000</pubDate>
    <atom:published>2024-10-01T13:00:00.000Z</atom:published>
    <atom:updated>2024-10-01T15:43:34.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <category>Payments Apps API</category>
    <category>2024-10</category>
    <link>https://shopify.dev/changelog/introducing-session-id-to-startpaymentsession</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/introducing-session-id-to-startpaymentsession</guid>
  </item>
  <item>
    <title>Introducing Payment Groups and Sessions to SubscriptionBillingAttempts</title>
    <description><![CDATA[ <div class=""><p>As of GraphQL Admin API version 2024-10, the SubscriptionBillingAttempt object will have two new fields: <a href="https://shopify.dev/docs/api/admin-graphql/unstable/objects/SubscriptionBillingAttempt#field-paymentgroupid" target="_blank" class="body-link">payment_group_id</a> and <a href="https://shopify.dev/docs/api/admin-graphql/unstable/objects/SubscriptionBillingAttempt#field-paymentsessionid" target="_blank" class="body-link">payment_session_id</a>.</p>
<p>This will allow your subscription apps to have better insights into how billing attempts correlate for merchant-facing statistics. </p>
<p>The payment group is defined as:</p>
<ul>
<li>Attempts belonged to the same subscription contract identity.</li>
<li>The attempts were all failures, or ended in a success. If two sequential successes occur with all the same attributes, then they're treated as separate groups.
It can be used for correlated retried billing attempts together.</li>
</ul>
<p>The payment session for subscriptions is defined as:</p>
<ul>
<li>Attempts used the same payment group</li>
<li>Attempts used the same payment method</li>
<li>Attempts used the same currency</li>
<li>Attempts were for the same amount
We expect any merchant facing statistics regarding payment success rates to only show a single success or failure per payment_session_id.</li>
</ul>
</div> ]]></description>
    <pubDate>Tue, 01 Oct 2024 13:00:00 +0000</pubDate>
    <atom:published>2024-10-01T13:00:00.000Z</atom:published>
    <atom:updated>2024-10-01T15:44:10.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <category>Admin GraphQL API</category>
    <category>2024-10</category>
    <link>https://shopify.dev/changelog/introducing-payment-groups-and-sessions-to-subscriptionbillingattempts</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/introducing-payment-groups-and-sessions-to-subscriptionbillingattempts</guid>
  </item>
  <item>
    <title>Exposing the order adjustments connection on a Refund</title>
    <description><![CDATA[ <div class=""><p>As of the 2024-10 Admin GraphQL API, you can use the <a href="https://shopify.dev/docs/api/admin-graphql/2024-10/objects/Refund#connection-orderadjustments" target="_blank" class="body-link"><code>Refund.orderAdjustments</code> connection</a> to query for the difference between calculated and actual refund amounts. The <a href="https://shopify.dev/docs/api/webhooks/2024-10?reference=graphql#list-of-topics-refunds_create" target="_blank" class="body-link"><code>REFUNDS_CREATE</code> webhook topic</a> will include order adjustments too. As of 2024-10, the webhook payload for <code>REFUNDS_CREATE</code> will <strong>not include</strong> the <code>kind</code> field. </p>
<p>Please note that the <a href="https://shopify.dev/docs/api/admin-graphql/unstable/objects/OrderAdjustment#field-kind" target="_blank" class="body-link"><code>OrderAdjustment.kind</code></a> field is now <strong>deprecated</strong> in the Admin GraphQL API. It is also deprecated in the legacy <a href="https://shopify.dev/docs/api/admin-rest/unstable/resources/refund#resource-object" target="_blank" class="body-link"><code>refund.order_adjustments</code></a> resource in the Admin REST API.</p>
<p>For this reason, refunded shipping costs will <strong>not</strong> be included in the <a href="https://shopify.dev/docs/api/admin-graphql/2024-10/objects/Refund#connection-orderadjustments" target="_blank" class="body-link"><code>Refund.orderAdjustments</code> connection</a>. To query for refunded shipping costs, use the <a href="https://shopify.dev/docs/api/admin-graphql/2024-10/objects/Refund#connection-refundshippinglines" target="_blank" class="body-link"><code>Refund.refundShippingLines</code> connection</a> instead. This connection has been updated as of <strong>July 18, 2024</strong> to include refunded shipping costs; <a href="https://shopify.dev/changelog/refunding-orders-with-multiple-shipping-lines-returns-accurate-data" target="_blank" class="body-link">more info here</a>. Refunded shipping costs will not be present in the webhook payload for <code>REFUNDS_CREATE</code> as of 2024-10 for the same reason.</p>
<p>The <a href="https://shopify.dev/docs/api/admin-graphql/unstable/objects/OrderAdjustment#field-kind" target="_blank" class="body-link"><code>OrderAdjustment.kind</code></a> field will be present on the <code>unstable</code> API version for 6 months to allow apps to migrate to the 2024-10 API version.</p>
</div> ]]></description>
    <pubDate>Tue, 01 Oct 2024 13:00:00 +0000</pubDate>
    <atom:published>2024-10-01T13:00:00.000Z</atom:published>
    <atom:updated>2024-10-01T13:00:00.000Z</atom:updated>
    <category>Action Required</category>
    <category>API</category>
    <category>Deprecation announcement</category>
    <category>Admin GraphQL API</category>
    <category>Admin REST API</category>
    <category>2024-10</category>
    <link>https://shopify.dev/changelog/exposing-the-order-adjustments-connection-on-a-refund</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/exposing-the-order-adjustments-connection-on-a-refund</guid>
  </item>
  <item>
    <title>Notify customers when their return requests are approved or declined</title>
    <description><![CDATA[ <div class=""><p>As of the 2024-10 API version, you can notify customers that their return request was approved or declined. </p>
<p>You can submit a <code>notifyCustomer</code> argument when approving a return request using <a href="https://shopify.dev/docs/api/admin-graphql/2024-10/mutations/returnApproveRequest" target="_blank" class="body-link">the <code>returnApproveRequest</code> mutation</a>.</p>
<p>You can also submit a <code>notifyCustomer</code> argument when declining a return request using <a href="https://shopify.dev/docs/api/admin-graphql/2024-10/mutations/returnDeclineRequest" target="_blank" class="body-link">the <code>returnDeclineRequest</code> mutation</a>. To include a custom message to the buyer in the email notification, use the <code>declineNote</code> argument.</p>
<p>When <code>notifyCustomer</code> is <code>true</code>, an email notification is sent to the <a href="https://shopify.dev/docs/api/admin-graphql/2024-10/objects/Order#field-email" target="_blank" class="body-link"><code>Order.email</code></a>. If this field is null, the notification is not sent.</p>
</div> ]]></description>
    <pubDate>Tue, 01 Oct 2024 13:00:00 +0000</pubDate>
    <atom:published>2024-10-01T13:00:00.000Z</atom:published>
    <atom:updated>2024-10-01T13:00:00.000Z</atom:updated>
    <category>API</category>
    <category>Update</category>
    <category>Admin GraphQL API</category>
    <category>2024-10</category>
    <link>https://shopify.dev/changelog/notify-customers-when-their-return-requests-are-approved-or-declined</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/notify-customers-when-their-return-requests-are-approved-or-declined</guid>
  </item>
  <item>
    <title>Breaking changes to returns API: Deprecate `reverseDeliveryDispose` mutation</title>
    <description><![CDATA[ <div class=""><p>As of GraphQL Admin API version <strong>2024-10</strong>, the <a href="https://shopify.dev/docs/api/admin-graphql/2024-01/mutations/reverseDeliveryDispose" target="_blank" class="body-link"><code>reverseDeliveryDispose</code></a> mutation will be deprecated. Use the <a href="https://shopify.dev/docs/api/admin-graphql/latest/mutations/reverseFulfillmentOrderDispose" target="_blank" class="body-link"><code>reverseFulfillmentOrderDispose</code></a> mutation instead.</p>
<p>Learn more about managing reverse fulfillment orders on <a href="https://shopify.dev/docs/apps/fulfillment/returns-apps/reverse-fulfillment-orders" target="_blank" class="body-link">Shopify.dev</a>.</p>
</div> ]]></description>
    <pubDate>Tue, 01 Oct 2024 13:00:00 +0000</pubDate>
    <atom:published>2024-10-01T13:00:00.000Z</atom:published>
    <atom:updated>2024-10-01T13:00:00.000Z</atom:updated>
    <category>Action Required</category>
    <category>API</category>
    <category>Deprecation announcement</category>
    <category>Admin GraphQL API</category>
    <category>2024-10</category>
    <link>https://shopify.dev/changelog/breaking-changes-to-returns-api-deprecate-reversedeliverydispose-mutation-1</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/breaking-changes-to-returns-api-deprecate-reversedeliverydispose-mutation-1</guid>
  </item>
  <item>
    <title>Removal of the `priceRule` resource from GraphQL Admin API</title>
    <description><![CDATA[ <div class=""><p>As of <code>2024-10</code>, the <code>priceRule</code> resource is being removed. The queries and mutations have been deprecated since <code>2023-03</code>.</p>
<p>The <a href="https://shopify.dev/docs/api/admin-graphql/2024-10/queries/discountNode" target="_blank" class="body-link">discount</a> resource can be used to achieve the same operations.</p>
</div> ]]></description>
    <pubDate>Tue, 01 Oct 2024 13:00:00 +0000</pubDate>
    <atom:published>2024-10-01T13:00:00.000Z</atom:published>
    <atom:updated>2024-10-01T13:00:00.000Z</atom:updated>
    <category>Action Required</category>
    <category>API</category>
    <category>Deprecation announcement</category>
    <category>Admin GraphQL API</category>
    <category>2024-10</category>
    <link>https://shopify.dev/changelog/removal-of-the-pricerule-resource-from-graphql-admin-api</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/removal-of-the-pricerule-resource-from-graphql-admin-api</guid>
  </item>
  <item>
    <title>New CompanyLocationStaffMemberAssignments API endpoints for managing staff member assignments on a Company Location</title>
    <description><![CDATA[ <div class=""><p>As of 2024-10, we've added a <code>CompanyLocationStaffMemberAssignment</code> to the <code>CompanyLocation</code> object for viewing the staff members assigned to the company location. </p>
<p>You can assign and remove staff members for a company location using the <code>CompanyLocationAssignStaffMembers</code> and <code>CompanyLocationRemoveStaffMembers</code> mutations.  </p>
</div> ]]></description>
    <pubDate>Tue, 01 Oct 2024 13:00:00 +0000</pubDate>
    <atom:published>2024-10-01T13:00:00.000Z</atom:published>
    <atom:updated>2024-10-01T13:00:00.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <category>Admin GraphQL API</category>
    <category>2024-10</category>
    <link>https://shopify.dev/changelog/new-companylocationstaffmemberassignments-api-endpoints-for-managing-staff-member-assignments-on-a-company-location</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/new-companylocationstaffmemberassignments-api-endpoints-for-managing-staff-member-assignments-on-a-company-location</guid>
  </item>
  <item>
    <title>Translatable content that is specific to a market context is now exposed</title>
    <description><![CDATA[ <div class=""><p>As of API version <code>2024-10</code>, you can use the <code>marketId</code> argument to retrieve translatable content that is specific to a market. Concretely, combined with <code>ONLINE_STORE_THEME_JSON_TEMPLATE</code> and <code>ONLINE_STORE_THEME_SECTION_GROUP</code> translatable resource types, you can retrieve translatable content within the added sections and blocks in a contextualized theme template or theme section group for a specfic market. More details can be found <a href="https://help.shopify.com/en/manual/online-store/themes/customizing-themes/store-contextualization" target="_blank" class="body-link">here</a> about customizing a theme for specific markets.</p>
</div> ]]></description>
    <pubDate>Tue, 01 Oct 2024 12:00:00 +0000</pubDate>
    <atom:published>2024-10-01T12:00:00.000Z</atom:published>
    <atom:updated>2024-10-01T12:00:00.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <category>Admin GraphQL API</category>
    <category>2024-10</category>
    <link>https://shopify.dev/changelog/translatable-content-that-is-specific-to-a-market-context-is-now-exposed</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/translatable-content-that-is-specific-to-a-market-context-is-now-exposed</guid>
  </item>
  <item>
    <title>Add new theme-related fields to `TranslatableResourceType` enum</title>
    <description><![CDATA[ <div class=""><p>As of API version <code>2024-10</code>, you can use these new fields to <code>TranslatableResourceType</code> that are related to the online store theme: <code>ONLINE_STORE_THEME_JSON_TEMPLATE</code>, <code>ONLINE_STORE_THEME_SECTION_GROUP</code>, <code>ONLINE_STORE_THEME_APP_EMBED</code>, <code>ONLINE_STORE_THEME_LOCALE_CONTENT</code>, <code>ONLINE_STORE_THEME_SETTINGS_CATEGORY</code> and <code>ONLINE_STORE_THEME_SETTINGS_DATA_SECTIONS</code></p>
<p>Together, these new types will cover the translatable content and translations within the existing ONLINE_STORE_THEME <a href="https://shopify.dev/docs/api/admin-graphql/2024-04/enums/TranslatableResourceType#value-onlinestoretheme" target="_blank" class="body-link">enum type</a> and offer more granularity with respect to the returned data. They are introduced with the intent of reducing the use of <code>ONLINE_STORE_THEME</code> type in the future, so that we do not return the entirety of a theme's content when it is not needed.</p>
<p>We are also introducing a <code>nestedTranslatableResources</code> connection under <code>TranslatableResource</code> object. When used with a <code>ONLINE_STORE_THEME</code> type <code>TranslatableResource</code>, the theme resources that belong to this particular theme are exposed.
--&gt;</p>
</div> ]]></description>
    <pubDate>Tue, 01 Oct 2024 12:00:00 +0000</pubDate>
    <atom:published>2024-10-01T12:00:00.000Z</atom:published>
    <atom:updated>2024-10-01T12:00:00.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <category>Admin GraphQL API</category>
    <category>2024-10</category>
    <link>https://shopify.dev/changelog/add-new-theme-related-fields-to-translatableresourcetype-enum</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/add-new-theme-related-fields-to-translatableresourcetype-enum</guid>
  </item>
  <item>
    <title>Localized fulfillment hold reason on `FulfillmentHold`</title>
    <description><![CDATA[ <div class=""><p>We've added a new localized string field <code>displayReason</code> to <code>FulfillmentHold</code> so that you can query for a human-readable reason when a fulfillment is on hold.</p>
</div> ]]></description>
    <pubDate>Tue, 01 Oct 2024 12:00:00 +0000</pubDate>
    <atom:published>2024-10-01T12:00:00.000Z</atom:published>
    <atom:updated>2024-10-01T12:00:00.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <category>Admin GraphQL API</category>
    <category>2024-10</category>
    <link>https://shopify.dev/changelog/localized-fulfillment-hold-reason-on-fulfillmenthold</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/localized-fulfillment-hold-reason-on-fulfillmenthold</guid>
  </item>
  <item>
    <title>Adding pagination arguments to Customer addresses</title>
    <description><![CDATA[ <div class=""><p>As of GraphQL Admin API version <strong>2024-10</strong>, the <code>addressesV2</code> field is introduced on the <code>Customer</code> object to support paginating through a customer's addresses.</p>
<p>Learn more about the <code>Customer</code> fields on <a href="https://shopify.dev/docs/api/admin-graphql/2024-10/objects/Customer" target="_blank" class="body-link">Shopify.dev</a>.</p>
</div> ]]></description>
    <pubDate>Tue, 01 Oct 2024 11:00:00 +0000</pubDate>
    <atom:published>2024-10-01T11:00:00.000Z</atom:published>
    <atom:updated>2024-10-01T11:00:00.000Z</atom:updated>
    <category>Action Required</category>
    <category>API</category>
    <category>Update</category>
    <category>Admin GraphQL API</category>
    <category>2024-10</category>
    <link>https://shopify.dev/changelog/adding-pagination-arguments-to-customer-addresses</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/adding-pagination-arguments-to-customer-addresses</guid>
  </item>
  <item>
    <title>GraphQL support to send customer account invite</title>
    <description><![CDATA[ <div class=""><p>As of GraphQL Admin API version <strong>2024-10</strong>, you can use the <code>customerSendAccountInviteEmail</code> mutation to send an email invite to create a classic customer account.</p>
</div> ]]></description>
    <pubDate>Tue, 01 Oct 2024 11:00:00 +0000</pubDate>
    <atom:published>2024-10-01T11:00:00.000Z</atom:published>
    <atom:updated>2024-10-01T11:00:00.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <category>Admin GraphQL API</category>
    <category>2024-10</category>
    <link>https://shopify.dev/changelog/graphql-support-to-send-customer-account-invite</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/graphql-support-to-send-customer-account-invite</guid>
  </item>
  <item>
    <title>New customer account pages now available in menus via Admin API</title>
    <description><![CDATA[ <div class=""><p>As of API version 2024-10, you can add links to the Orders, Profile, and Settings pages to navigation menus.</p>
<p>To learn more, refer to <a href="https://shopify.dev/docs/api/admin-graphql/2024-10/mutations/menuCreate" target="_blank" class="body-link">menuCreate</a>, <a href="https://shopify.dev/docs/api/admin-graphql/2024-10/mutations/menuUpdate" target="_blank" class="body-link">menuUpdate</a> and <a href="https://shopify.dev/docs/api/admin-graphql/2024-10/queries/menus" target="_blank" class="body-link">menu</a></p>
</div> ]]></description>
    <pubDate>Tue, 01 Oct 2024 05:00:00 +0000</pubDate>
    <atom:published>2024-10-01T05:00:00.000Z</atom:published>
    <atom:updated>2024-10-01T05:00:00.000Z</atom:updated>
    <category>API</category>
    <category>Update</category>
    <category>Admin GraphQL API</category>
    <category>Storefront API</category>
    <category>Liquid</category>
    <category>2024-10</category>
    <link>https://shopify.dev/changelog/new-customer-account-pages-now-available-in-menus-via-admin-api</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/new-customer-account-pages-now-available-in-menus-via-admin-api</guid>
  </item>
  <item>
    <title>New abandoned checkouts listing endpoint on the admin GraphQL API</title>
    <description><![CDATA[ <div class=""><p>As of 2024-10, you can use the <code>abandonedCheckouts</code> endpoint to get the list of abandoned checkouts of a shop. This will replace the current <a href="https://shopify.dev/docs/api/admin-rest/unstable/resources/abandoned-checkouts" target="_blank" class="body-link">REST</a> endpoint.</p>
</div> ]]></description>
    <pubDate>Tue, 01 Oct 2024 05:00:00 +0000</pubDate>
    <atom:published>2024-10-01T05:00:00.000Z</atom:published>
    <atom:updated>2024-10-01T05:00:00.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <category>Admin GraphQL API</category>
    <category>2024-10</category>
    <link>https://shopify.dev/changelog/new-abandoned-checkouts-listing-endpoint-on-the-admin-graphql-api</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/new-abandoned-checkouts-listing-endpoint-on-the-admin-graphql-api</guid>
  </item>
  <item>
    <title>Subscription Contract fields now fully available on the Customer API </title>
    <description><![CDATA[ <div class=""><p>As of the <strong>2024-10</strong> release of the GraphQL Customer API, you can now query the following fields for a <a href="https://shopify.dev/docs/api/customer/2024-10/objects/Customer" target="_blank" class="body-link">customer's</a> subscription contracts using the <code>subscriptionContracts</code> or <code>subscriptionContract</code> fields:</p>
<ul>
<li>linesCount</li>
<li>billingPolicy</li>
<li>deliveryPolicy</li>
<li>deliveryMethod</li>
<li>deliveryPrice</li>
<li>updatedAt</li>
<li>currencyCode</li>
</ul>
<p>We’ve also added support for the following connections:</p>
<ul>
<li>lines </li>
<li>orders</li>
</ul>
<p>The <code>customer_read_own_subscription_contracts</code> permission is now required to query subscription contracts and the <code>customer_write_own_subscription_contracts</code> permission is now required for subscription contract mutations.</p>
<p>Learn more about subscription contracts on the Customer API at  <a href="https://shopify.dev/docs/api/customer/2024-10/objects/SubscriptionContract" target="_blank" class="body-link">Shopify.dev</a>.</p>
</div> ]]></description>
    <pubDate>Tue, 01 Oct 2024 04:01:00 +0000</pubDate>
    <atom:published>2024-10-01T04:01:00.000Z</atom:published>
    <atom:updated>2024-10-01T04:01:00.000Z</atom:updated>
    <category>API</category>
    <category>Update</category>
    <category>Customer Account API</category>
    <category>2024-10</category>
    <link>https://shopify.dev/changelog/subscription-contract-fields-now-fully-available-on-the-customer-api</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/subscription-contract-fields-now-fully-available-on-the-customer-api</guid>
  </item>
  <item>
    <title>Add subscription status updates to bulkOperationRunMutation</title>
    <description><![CDATA[ <div class=""><p>Subscription Status updates can now be run with the bulkOperationRunMutation.</p>
<p>The following mutations have been added:</p>
<ul>
<li><code>subscriptionContractActivate</code></li>
<li><code>subscriptionContractCancel</code></li>
<li><code>subscriptionContractExpire</code></li>
<li><code>subscriptionContractFail</code></li>
<li><code>subscriptionContractPause</code></li>
</ul>
<p>See <a href="https://shopify.dev/docs/api/usage/bulk-operations/imports" target="_blank" class="body-link">https://shopify.dev/docs/api/usage/bulk-operations/imports</a> for more information.</p>
</div> ]]></description>
    <pubDate>Tue, 01 Oct 2024 04:00:00 +0000</pubDate>
    <atom:published>2024-10-01T04:00:00.000Z</atom:published>
    <atom:updated>2024-10-01T04:00:00.000Z</atom:updated>
    <category>API</category>
    <category>Update</category>
    <category>Admin GraphQL API</category>
    <category>2024-10</category>
    <link>https://shopify.dev/changelog/add-subscription-status-updates-to-bulkoperationrunmutation</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/add-subscription-status-updates-to-bulkoperationrunmutation</guid>
  </item>
  <item>
    <title>Querying events through the `events` connection and `CommentEvent.subject` becomes nullable</title>
    <description><![CDATA[ <div class=""><p>As of  2024-10, you can query <a href="https://shopify.dev/docs/api/admin-graphql/unstable/interfaces/Event" target="_blank" class="body-link">events</a> by means of <code>eventsCount</code>, <code>event</code> and <code>events</code>.</p>
<p>There has been the addition of an <code>events</code> connection on several types as well, allowing you to query the related events:</p>
<ul>
<li><a href="https://shopify.dev/docs/api/admin-graphql/unstable/objects/Article" target="_blank" class="body-link">Article</a></li>
<li><a href="https://shopify.dev/docs/api/admin-graphql/unstable/objects/Blog" target="_blank" class="body-link">Blog</a></li>
<li><a href="https://shopify.dev/docs/api/admin-graphql/unstable/objects/Collection" target="_blank" class="body-link">Collection</a></li>
<li><a href="https://shopify.dev/docs/api/admin-graphql/unstable/objects/Comment" target="_blank" class="body-link">Comments</a></li>
<li><a href="https://shopify.dev/docs/api/admin-graphql/unstable/objects/Page" target="_blank" class="body-link">Pages</a></li>
<li><a href="https://shopify.dev/docs/api/admin-graphql/unstable/objects/ProductVariant" target="_blank" class="body-link">ProductVariants</a></li>
<li><a href="https://shopify.dev/docs/api/admin-graphql/unstable/objects/Product" target="_blank" class="body-link">Products</a></li>
</ul>
<p>There has been one breaking change on the <code>CommentEvent.subject</code> field where we transitioned it to be nullable, null will be returned when the <code>subject</code>'s underlying data has been deleted, in the process we also deprected <code>deletionEvents</code> as these are now returned as an <code>Event</code>. When the <code>subject</code> is deleted, the REST API, will also return <code>null</code> for the <code>subject</code> property.</p>
</div> ]]></description>
    <pubDate>Tue, 01 Oct 2024 04:00:00 +0000</pubDate>
    <atom:published>2024-10-01T04:00:00.000Z</atom:published>
    <atom:updated>2024-10-01T04:00:00.000Z</atom:updated>
    <category>Action Required</category>
    <category>API</category>
    <category>New</category>
    <category>Admin GraphQL API</category>
    <category>Admin REST API</category>
    <category>2024-10</category>
    <link>https://shopify.dev/changelog/querying-events-through-the-events-connection-and-commentevent-subject-becomes-nullable</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/querying-events-through-the-events-connection-and-commentevent-subject-becomes-nullable</guid>
  </item>
  <item>
    <title>Cart Warnings in Storefront API Cart</title>
    <description><![CDATA[ <div class=""><p>As of API version 2024-10, inventory errors about stock levels will no longer be included in the <code>userErrors</code> of cart mutations. Inventory errors will now be available in a new return field, <code>warnings</code> and will contain explicit <code>code</code> values of <code>MERCHANDISE_NOT_ENOUGH_STOCK</code> or <code>MERCHANDISE_OUT_OF_STOCK</code>.</p>
<p>Warnings will be available on all cart mutations to show automatic changes that occurred during the mutation.  You can use warnings to manage items in your cart or display information to a buyer.  For example, out of stock lines can be easily removed from a cart by using the <code>target</code> field included in the warning as the input to a call to <code>CartLineRemove</code>. </p>
<p>Learn more about cart warnings on <a href="https://shopify.dev/docs/storefronts/headless/building-with-the-storefront-api/cart/cart-warnings" target="_blank" class="body-link">Shopify.dev</a>.</p>
</div> ]]></description>
    <pubDate>Tue, 01 Oct 2024 04:00:00 +0000</pubDate>
    <atom:published>2024-10-01T04:00:00.000Z</atom:published>
    <atom:updated>2024-10-01T04:00:00.000Z</atom:updated>
    <category>Action Required</category>
    <category>API</category>
    <category>New</category>
    <category>Storefront API</category>
    <category>2024-10</category>
    <link>https://shopify.dev/changelog/cart-warnings-in-storefront-api-cart</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/cart-warnings-in-storefront-api-cart</guid>
  </item>
  <item>
    <title>New webhook topic `app/scopes_update`</title>
    <description><![CDATA[ <div class=""><p>As of Webhook API version <code>2024-10</code> and <code>unstable</code>, apps can subscribe to the <code>app/scopes_update</code> webhook topic.</p>
<p>This webhook is triggered when the granted access scopes for the installed app on a shop have been modified. It allows apps to keep track of the granted access scopes of their installations.</p>
<p>For example, an app that has enabled <a href="https://shopify.dev/docs/apps/build/authentication-authorization/app-installation" target="_blank" class="body-link">Shopify managed install</a> is released with a new configuration that increased the requested scopes from <code>&quot;read_customers&quot;</code> to <code>&quot;read_customers,read_discounts&quot;</code>. Once a merchant opens the app and approves the <code>read_discounts</code> access scope this webhook will be emitted with payload:</p>
<pre><code class="language-json">{
  &quot;id&quot;: 1234,
  &quot;previous&quot;: [
    &quot;read_customers&quot;
  ],
  &quot;current&quot;: [
    &quot;read_customers&quot;,
    &quot;read_discounts&quot;
  ],
  &quot;updated_at&quot;: &quot;2024-10-01T00:00:00.000Z&quot;
}
</code></pre>
<p>Learn more about this webhook on <a href="https://shopify.dev/docs/api/webhooks/unstable?reference=toml#list-of-topics-app/scopes_update" target="_blank" class="body-link">Shopify.dev</a></p>
</div> ]]></description>
    <pubDate>Tue, 01 Oct 2024 04:00:00 +0000</pubDate>
    <atom:published>2024-10-01T04:00:00.000Z</atom:published>
    <atom:updated>2024-11-04T16:56:48.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <category>Events &amp; webhooks</category>
    <category>2024-10</category>
    <link>https://shopify.dev/changelog/new-webhook-topic-app-scopes_update</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/new-webhook-topic-app-scopes_update</guid>
  </item>
  <item>
    <title>New `created_fulfillment_hold` field on `fulfillment_orders/placed_on_hold` webhook</title>
    <description><![CDATA[ <div class=""><p>As of Admin API version 2024-10, you can use the <code>created_fulfillment_hold</code> field on <code>fulfillment_orders/placed_on_hold</code> webhook  to see the fulfillment hold that was created.</p>
<p><strong>Why was this field added</strong>
A fulfillment hold gets deleted when a hold is released. It is possible that the <code>FulfillmentOrder.FulfillmentHolds</code> field will be empty by the time the subscriber receives the webhook. The new field <code>created_fulfillment_hold</code> will always show hold that was created regardless of whether it has already been released/deleted. </p>
<p>Learn more about <code>fulfillment_orders/placed_on_hold</code> webhook on <a href="https://shopify.dev/docs/api/webhooks/2024-10?reference=toml#list-of-topics-fulfillment_orders/placed_on_hold" target="_blank" class="body-link">Shopify.dev</a>.</p>
</div> ]]></description>
    <pubDate>Tue, 01 Oct 2024 04:00:00 +0000</pubDate>
    <atom:published>2024-10-01T04:00:00.000Z</atom:published>
    <atom:updated>2024-10-01T04:00:00.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <category>Events &amp; webhooks</category>
    <category>2024-10</category>
    <link>https://shopify.dev/changelog/new-created_fulfillment_hold-field-on-fulfillment_orders-placed_on_hold-webhook</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/new-created_fulfillment_hold-field-on-fulfillment_orders-placed_on_hold-webhook</guid>
  </item>
  <item>
    <title>Removal of deprecated product image mutations from the GraphQL Admin API</title>
    <description><![CDATA[ <div class=""><p>As of <strong>2024-10</strong>, we're removing the deprecated <code>productAppendImages</code>, <code>productDeleteImages</code>, <code>productImageUpdate</code> and <code>productReorderImages</code> mutations from public GraphQL API.</p>
<p>Use the <a href="https://shopify.dev/docs/api/admin-graphql/2024-10/mutations/productCreateMedia" target="_blank" class="body-link">productCreateMedia</a>, <a href="https://shopify.dev/docs/api/admin-graphql/2024-10/mutations/productDeleteMedia" target="_blank" class="body-link">productDeleteMedia</a>, <a href="https://shopify.dev/docs/api/admin-graphql/2024-10/mutations/productUpdateMedia" target="_blank" class="body-link">productUpdateMedia</a> and <a href="https://shopify.dev/docs/api/admin-graphql/2024-10/mutations/productReorderMedia" target="_blank" class="body-link">productReorderMedia</a>  mutation instead.</p>
</div> ]]></description>
    <pubDate>Tue, 01 Oct 2024 04:00:00 +0000</pubDate>
    <atom:published>2024-10-01T04:00:00.000Z</atom:published>
    <atom:updated>2024-10-01T04:00:00.000Z</atom:updated>
    <category>Action Required</category>
    <category>API</category>
    <category>Deprecation announcement</category>
    <category>Admin GraphQL API</category>
    <category>2024-10</category>
    <link>https://shopify.dev/changelog/removal-of-deprecated-product-image-mutations-from-the-graphql-admin-api</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/removal-of-deprecated-product-image-mutations-from-the-graphql-admin-api</guid>
  </item>
  <item>
    <title>Added FAILED_TO_RETRIEVE_BILLING_ADDRESS to CustomerPaymentMethodRevocationReason Enum</title>
    <description><![CDATA[ <div class=""><p>As of GraphQL Admin API version 2024-10, the CustomerPaymentMethodRevocationReason object has a new enum value: <code>FAILED_TO_RETRIEVE_BILLING_ADDRESS</code>. This value is assigned when a customer payment method is missing the billing address field.</p>
</div> ]]></description>
    <pubDate>Tue, 01 Oct 2024 04:00:00 +0000</pubDate>
    <atom:published>2024-10-01T04:00:00.000Z</atom:published>
    <atom:updated>2024-10-01T04:00:00.000Z</atom:updated>
    <category>API</category>
    <category>Update</category>
    <category>Admin GraphQL API</category>
    <category>2024-10</category>
    <link>https://shopify.dev/changelog/added-failed_to_retrieve_billing_address-to-customerpaymentmethodrevocationreason-enum</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/added-failed_to_retrieve_billing_address-to-customerpaymentmethodrevocationreason-enum</guid>
  </item>
  <item>
    <title>Order Management apps can no longer fulfill orders that are assigned to a different fulfillment service</title>
    <description><![CDATA[ <div class=""><p>As of <code>2024-10</code>, the <code>write_third_party_fulfillment_orders</code> access scope permission will change for fulfillment creation. This access scope will no longer allow <a href="https://shopify.dev/docs/apps/build/orders-fulfillment/order-management-apps" target="_blank" class="body-link">order management apps</a> to fulfill fulfillment orders assigned to locations owned by other fulfillment service apps. Order management apps will still be able to access and manage these orders, only fulfillment creation will be prohibited. </p>
<p>The <code>write_assigned_fulfillment_orders</code> and <code>write_merchant_managed_fulfillment_orders</code> access scopes will remain unchanged. Fulfillment service apps will continue to be able to fulfill orders assigned to them as long as they have the <code>write_assigned_fulfillment_orders</code> access scope. Fulfillment orders assigned to merchant managed locations will continue to be fulfillable by order management apps as long as they have the <code>write_merchant_managed_fulfillment_orders</code> access scope. </p>
<p>Apps can confirm whether or not fulfillment creation is possible by querying the available <code>supportedActions</code> through either the <a href="https://shopify.dev/docs/api/admin-graphql/2024-10/objects/FulfillmentOrder#field-supportedactions" target="_blank" class="body-link">GraphQL</a> or <a href="https://shopify.dev/docs/api/admin-rest/2024-10/resources/fulfillmentorder#get-fulfillment-orders-fulfillment-order-id" target="_blank" class="body-link">REST</a> APIs. If the fulfillment order is assigned to a merchant managed location or to the fulfillment service performing the query and it is in a fulfillable state, <code>CREATE_FULFILLMENT</code> will be returned as a possible option.</p>
</div> ]]></description>
    <pubDate>Tue, 01 Oct 2024 04:00:00 +0000</pubDate>
    <atom:published>2024-10-01T04:00:00.000Z</atom:published>
    <atom:updated>2024-10-01T04:00:00.000Z</atom:updated>
    <category>Action Required</category>
    <category>API</category>
    <category>Update</category>
    <category>Admin GraphQL API</category>
    <category>Admin REST API</category>
    <category>2024-10</category>
    <link>https://shopify.dev/changelog/order-management-apps-can-no-longer-fulfill-orders-that-are-assigned-to-a-different-fulfillment-service</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/order-management-apps-can-no-longer-fulfill-orders-that-are-assigned-to-a-different-fulfillment-service</guid>
  </item>
  <item>
    <title>New parameter on `fulfillmentServiceDelete` to control inventory behaviour on location removal</title>
    <description><![CDATA[ <div class=""><p>As of GraphQL API version <code>2024-10</code> we will introduce a new enum field for the <code>fulfillmentServiceDelete</code> mutation. The <code>inventoryAction</code> field will allow partners to specifiy the behaviour regarding the inventory when deleting a fulfillment service. The options are:</p>
<ol>
<li><code>KEEP</code> - this option will convert a Fulfillment Service's locations to be owned by the merchant and therefore the inventory at those locations becomes the responsiblity of the merchant.</li>
<li><code>DELETE</code> - this option, when there are no outstanding fulfillments, will delete the inventory at the location and then the location itself. </li>
<li><code>TRANSFER</code> - this is the existing behaviour, where a <code>destinationLocationId</code> is provided as the destination to relocate the inventory to, before the location is deleted.</li>
</ol>
<p>If either <code>KEEP</code> or <code>DELETE</code> are provided, it is not possible to also specify a <code>destinationLocationId</code>. </p>
<p>If <code>KEEP</code> is provided, then the merchant must have a sufficient remaining quota of locations on their plan for this operation to succeed, an error will be returned if they do not.  </p>
</div> ]]></description>
    <pubDate>Tue, 01 Oct 2024 04:00:00 +0000</pubDate>
    <atom:published>2024-10-01T04:00:00.000Z</atom:published>
    <atom:updated>2024-10-01T04:00:00.000Z</atom:updated>
    <category>API</category>
    <category>Update</category>
    <category>Admin GraphQL API</category>
    <category>2024-10</category>
    <link>https://shopify.dev/changelog/new-parameter-on-fulfillmentservicedelete-to-control-inventory-behaviour-on-location-removal</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/new-parameter-on-fulfillmentservicedelete-to-control-inventory-behaviour-on-location-removal</guid>
  </item>
  <item>
    <title>`fulfillmentOrderHold` mutation updated to return a fulfillment hold resource</title>
    <description><![CDATA[ <div class=""><p>As of the GraphQL Admin API version 2024-10, the <code>fulfillmentOrderHold</code> mutation will return the fulfillment hold that was created in a new <code>fulfillmentHold</code> return field.</p>
<p>Learn more about the <a href="https://shopify.dev/docs/api/admin-graphql/latest/mutations/fulfillmentOrderHold" target="_blank" class="body-link">fulfillmentOrderHold mutation</a>.</p>
</div> ]]></description>
    <pubDate>Tue, 01 Oct 2024 04:00:00 +0000</pubDate>
    <atom:published>2024-10-01T04:00:00.000Z</atom:published>
    <atom:updated>2024-10-01T04:00:00.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <category>Admin GraphQL API</category>
    <category>2024-10</category>
    <link>https://shopify.dev/changelog/fulfillmentorderhold-mutation-updated-to-return-a-fulfillment-hold-resource</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/fulfillmentorderhold-mutation-updated-to-return-a-fulfillment-hold-resource</guid>
  </item>
  <item>
    <title>New field and permission update to fulfillment hold resource</title>
    <description><![CDATA[ <div class=""><p>As of the GraphQL Admin API version 2024-10, a <code>heldByRequestingApp</code>  field is being added to  the <code>FulfillmentHold</code>  GraphQL resource.</p>
<p>As of the GraphQL Admin API version 2024-10, you will only be able to read the <code>heldBy</code> field on the <code>FulfillmentHold</code>  GraphQL resource if you have <code>read_apps</code> scope enabled on your application. Use the <code>heldByRequestingApp</code> boolean field instead if you need to see if your application created the fulfillment hold.</p>
<p>Learn more about <a href="https://shopify.dev/docs/api/admin-graphql/latest/objects/FulfillmentHold" target="_blank" class="body-link">FulfillmentHolds</a>.</p>
</div> ]]></description>
    <pubDate>Tue, 01 Oct 2024 04:00:00 +0000</pubDate>
    <atom:published>2024-10-01T04:00:00.000Z</atom:published>
    <atom:updated>2024-10-01T04:00:00.000Z</atom:updated>
    <category>Action Required</category>
    <category>API</category>
    <category>Update</category>
    <category>Admin GraphQL API</category>
    <category>2024-10</category>
    <link>https://shopify.dev/changelog/new-field-and-permission-update-to-fulfillment-hold-resource</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/new-field-and-permission-update-to-fulfillment-hold-resource</guid>
  </item>
  <item>
    <title>`ProductInput` split into `ProductCreateInput` and `ProductUpdateInput` in `2024-10`</title>
    <description><![CDATA[ <div class=""><p>As of <code>2024-10</code> version of the Admin GraphQL API, the <code>ProductInput</code> object has been split into <code>ProductCreateInput</code> and <code>ProductUpdateInput</code>. The <code>productCreate</code> and <code>productUpdate</code> mutations now accept a new <code>product</code> argument using these types. </p>
<p>The existing <code>input</code> field has been marked deprecated.</p>
<p>Learn more about <a href="https://shopify.dev/docs/api/admin-graphql/2024-10/input-objects/ProductCreateInput" target="_blank" class="body-link">ProductCreateInput</a> and <a href="https://shopify.dev/docs/api/admin-graphql/2024-10/input-objects/ProductUpdateInput" target="_blank" class="body-link">ProductUpdateInput</a> on <a href="https://shopify.dev/" target="_blank" class="body-link">Shopify.dev</a>.</p>
</div> ]]></description>
    <pubDate>Tue, 01 Oct 2024 03:08:00 +0000</pubDate>
    <atom:published>2024-10-01T03:08:00.000Z</atom:published>
    <atom:updated>2024-10-02T06:25:07.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <category>Admin GraphQL API</category>
    <category>2024-10</category>
    <link>https://shopify.dev/changelog/productinput-split-into-productcreateinput-and-productupdateinput-in-2024-10</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/productinput-split-into-productcreateinput-and-productupdateinput-in-2024-10</guid>
  </item>
  <item>
    <title>Admin GraphQL API: new APIs for Pages, Articles, Blogs, and Comments now available in 2024-10</title>
    <description><![CDATA[ <div class=""><p>As of version 2024-10 of the Admin GraphQL API, you can now read and modify Pages, Articles, Blogs, Comments. <code>Page</code>, <code>Article</code>, and <code>Blog</code> types have replaced the <code>OnlineStorePage</code>, <code>OnlineStoreArticle</code>, and <code>OnlineStoreBlog</code> types in the API.</p>
<p>Pages:</p>
<ul>
<li>You can now create new pages using <a href="https://shopify.dev/docs/api/admin-graphql/2024-10/mutations/pageCreate" target="_blank" class="body-link"><code>pageCreate</code></a>, modify existing pages using <a href="https://shopify.dev/docs/api/admin-graphql/2024-10/mutations/pageUpdate" target="_blank" class="body-link"><code>pageUpdate</code></a>, and delete pages using <a href="https://shopify.dev/docs/api/admin-graphql/2024-10/mutations/pageDelete" target="_blank" class="body-link"><code>pageDelete</code></a>.</li>
<li>Pages can be queried using the new <a href="https://shopify.dev/docs/api/admin-graphql/2024-10/queries/page" target="_blank" class="body-link"><code>page</code></a> or <a href="https://shopify.dev/docs/api/admin-graphql/2024-10/queries/pages" target="_blank" class="body-link"><code>pages</code></a> queries.</li>
</ul>
<p>Articles:</p>
<ul>
<li>You can now create new articles using <a href="https://shopify.dev/docs/api/admin-graphql/2024-10/mutations/articleCreate" target="_blank" class="body-link"><code>articleCreate</code></a>, modify existing articles using <a href="https://shopify.dev/docs/api/admin-graphql/2024-10/mutations/articleUpdate" target="_blank" class="body-link"><code>articleUpdate</code></a>, and delete articles using <a href="https://shopify.dev/docs/api/admin-graphql/2024-10/mutations/articleDelete" target="_blank" class="body-link"><code>articleDelete</code></a>.</li>
<li>Articles can be queried using the new <a href="https://shopify.dev/docs/api/admin-graphql/2024-10/queries/article" target="_blank" class="body-link"><code>article</code></a> or <a href="https://shopify.dev/docs/api/admin-graphql/2024-10/queries/articles" target="_blank" class="body-link"><code>articles</code></a> queries.</li>
</ul>
<p>Blogs:</p>
<ul>
<li>You can now create new blogs using <a href="https://shopify.dev/docs/api/admin-graphql/2024-10/mutations/blogCreate" target="_blank" class="body-link"><code>blogCreate</code></a>, modify existing blogs using <a href="https://shopify.dev/docs/api/admin-graphql/2024-10/mutations/blogUpdate" target="_blank" class="body-link"><code>blogUpdate</code></a>, and delete blogs using <a href="https://shopify.dev/docs/api/admin-graphql/2024-10/mutations/blogDelete" target="_blank" class="body-link"><code>blogDelete</code></a>.</li>
<li>Blogs can be queried using the new <a href="https://shopify.dev/docs/api/admin-graphql/2024-10/queries/blog" target="_blank" class="body-link"><code>blog</code></a> or <a href="https://shopify.dev/docs/api/admin-graphql/2024-10/queries/blogs" target="_blank" class="body-link"><code>blogs</code></a> queries.</li>
</ul>
<p>Comments:</p>
<ul>
<li>You can now modify existing comments using <a href="https://shopify.dev/docs/api/admin-graphql/2024-10/mutations/commentApprove" target="_blank" class="body-link"><code>commentApprove</code></a>, <a href="https://shopify.dev/docs/api/admin-graphql/2024-10/mutations/commentSpam" target="_blank" class="body-link"><code>commentSpam</code></a>, or <a href="https://shopify.dev/docs/api/admin-graphql/2024-10/mutations/commentNotSpam" target="_blank" class="body-link"><code>commentNotSpam</code></a>. Comments can be deleted with <a href="https://shopify.dev/docs/api/admin-graphql/2024-10/mutations/commentDelete" target="_blank" class="body-link"><code>commentDelete</code></a>.</li>
<li>Comments can be queried using the new <a href="https://shopify.dev/docs/api/admin-graphql/2024-10/queries/comment" target="_blank" class="body-link"><code>comment</code></a> or <a href="https://shopify.dev/docs/api/admin-graphql/2024-10/queries/comments" target="_blank" class="body-link"><code>comments</code></a> queries</li>
</ul>
</div> ]]></description>
    <pubDate>Tue, 01 Oct 2024 00:00:00 +0000</pubDate>
    <atom:published>2024-10-01T00:00:00.000Z</atom:published>
    <atom:updated>2024-10-30T21:05:28.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <category>Admin GraphQL API</category>
    <category>2024-10</category>
    <link>https://shopify.dev/changelog/admin-graphql-api-new-apis-for-pages-articles-blogs-and-comments-now-available-in-2024-10</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/admin-graphql-api-new-apis-for-pages-articles-blogs-and-comments-now-available-in-2024-10</guid>
  </item>
  <item>
    <title>Create App Store Ads on Tag-Level Category Pages</title>
    <description><![CDATA[ <div class=""><p>App Store ads on the Shopify App Store now support targeting tag-level category pages, in addition to main and sub-category pages. For more information on App Store category page types, <a href="https://shopify.dev/docs/apps/launch/app-store-review/app-listing-categories#list-of-app-categories-subcategories-and-tags" target="_blank" class="body-link">see here</a>.</p>
</div> ]]></description>
    <pubDate>Mon, 30 Sep 2024 21:21:00 +0000</pubDate>
    <atom:published>2024-09-30T21:21:00.000Z</atom:published>
    <atom:updated>2024-09-30T21:21:00.000Z</atom:updated>
    <category>App store</category>
    <category>New</category>
    <link>https://shopify.dev/changelog/create-app-store-ads-on-tag-level-category-pages</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/create-app-store-ads-on-tag-level-category-pages</guid>
  </item>
  <item>
    <title>Deprecating explicit access grants for app-owned metafields</title>
    <description><![CDATA[ <div class=""><p><a href="https://shopify.dev/docs/api/admin-graphql/2024-07/objects/MetafieldAccess#field-grants" target="_blank" class="body-link">Specifying grants for specific apps</a> on app-owned metafields is now deprecated. New apps will not be able to use this feature effective immediately. Existing apps will continue to have access.</p>
</div> ]]></description>
    <pubDate>Mon, 30 Sep 2024 19:30:00 +0000</pubDate>
    <atom:published>2024-09-30T19:30:00.000Z</atom:published>
    <atom:updated>2024-09-30T19:30:00.000Z</atom:updated>
    <category>Action Required</category>
    <category>API</category>
    <category>Deprecation announcement</category>
    <category>Admin GraphQL API</category>
    <category>2025-01</category>
    <link>https://shopify.dev/changelog/deprecating-explicit-access-grants-for-app-owned-metafields</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/deprecating-explicit-access-grants-for-app-owned-metafields</guid>
  </item>
  <item>
    <title>Surface payment group id and payment session id on subscription billing attempts</title>
    <description><![CDATA[ <div class=""><p>We've introduced the <a href="https://shopify.dev/docs/api/admin-graphql/unstable/objects/SubscriptionBillingAttempt" target="_blank" class="body-link"><code>SubscriptionBillingAttempt</code></a> object to track subscription billing executions. This new functionality provides the following features:</p>
<ul>
<li>Records each subscription billing process execution</li>
<li>Uses idempotency keys to prevent duplicate orders</li>
<li>Creates orders upon successful billing attempts</li>
</ul>
<p>Existing Partner integrations aren't affected.</p>
</div> ]]></description>
    <pubDate>Mon, 30 Sep 2024 16:00:00 +0000</pubDate>
    <atom:published>2024-09-30T16:00:00.000Z</atom:published>
    <atom:updated>2025-03-18T21:22:10.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <category>Payments Apps API</category>
    <category>2024-10</category>
    <link>https://shopify.dev/changelog/surface-payment-group-id-and-payment-session-id-on-subscription-billing-attempts</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/surface-payment-group-id-and-payment-session-id-on-subscription-billing-attempts</guid>
  </item>
  <item>
    <title>Added connection to order transaction from subscription billing attempts</title>
    <description><![CDATA[ <div class=""><p>We've introduced the <a href="https://shopify.dev/docs/api/admin-graphql/unstable/objects/SubscriptionBillingAttempt" target="_blank" class="body-link"><code>SubscriptionBillingAttempt</code></a> object to track subscription billing executions. This new functionality provides the following features:</p>
<ul>
<li>Records each subscription billing process execution</li>
<li>Uses idempotency keys to prevent duplicate orders</li>
<li>Creates orders upon successful billing attempts</li>
</ul>
<p>Existing Partner integrations aren't affected.</p>
</div> ]]></description>
    <pubDate>Mon, 30 Sep 2024 16:00:00 +0000</pubDate>
    <atom:published>2024-09-30T16:00:00.000Z</atom:published>
    <atom:updated>2025-03-18T21:17:52.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <category>Payments Apps API</category>
    <category>2024-10</category>
    <link>https://shopify.dev/changelog/added-connection-to-order-transaction-from-subscription-billing-attempts</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/added-connection-to-order-transaction-from-subscription-billing-attempts</guid>
  </item>
  <item>
    <title>Add LocalPaymentMethodDetails</title>
    <description><![CDATA[ <div class=""><p>We've introduced the <a href="https://shopify.dev/docs/api/admin-graphql/2024-10/objects/LocalPaymentMethodsPaymentDetails" target="_blank" class="body-link"><code>LocalPaymentMethodsPaymentDetails</code></a> object to handle transaction details for local payment methods. This object enhances transaction processing capabilities by enabling devs to access and manipulate payment details that are specific to local payment methods.</p>
</div> ]]></description>
    <pubDate>Mon, 30 Sep 2024 16:00:00 +0000</pubDate>
    <atom:published>2024-09-30T16:00:00.000Z</atom:published>
    <atom:updated>2025-03-18T21:15:32.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <category>Payments Apps API</category>
    <category>2024-10</category>
    <link>https://shopify.dev/changelog/add-localpaymentmethoddetails</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/add-localpaymentmethoddetails</guid>
  </item>
  <item>
    <title>Introducing theme and theme file management in the Admin GraphQL API</title>
    <description><![CDATA[ <div class=""><p>As of API version 2024-10, you can use the admin API to manage Online Store Themes. This feature provides parity with our REST API for managing themes and theme files.</p>
<h1>What's New</h1>
<h2>New queries:</h2>
<ul>
<li><code>theme</code> to query an individual theme by ID</li>
<li><code>themes</code> to query many themes by role or name</li>
</ul>
<p><code>OnlineStoreTheme</code> objects expose a <code>files</code> query which can be used to fetch the metadata and content of files in a theme. Multiple files can be requested at once, speeding up operations that need to fetch many files.</p>
<h2>New mutations for themes:</h2>
<ul>
<li><code>themeCreate</code> - upload a new theme</li>
<li><code>themeDelete</code> - delete an unpublished theme</li>
<li><code>themePublish</code> - publish a theme</li>
<li><code>themeUpdate</code> - update the name of a theme</li>
</ul>
<h2>New mutations for theme files:</h2>
<ul>
<li><code>themeFilesCopy</code>  - copy files from one location to another</li>
<li><code>themeFilesDelete</code> - delete files in a theme</li>
<li><code>themeFilesUpsert</code> - write data to files in a theme</li>
</ul>
<p>Learn more about these changes on <a href="https://shopify.dev/docs/api/admin-graphql/2024-10/objects/OnlineStoreTheme" target="_blank" class="body-link">Shopify.dev</a></p>
</div> ]]></description>
    <pubDate>Mon, 30 Sep 2024 14:08:00 +0000</pubDate>
    <atom:published>2024-09-30T14:08:00.000Z</atom:published>
    <atom:updated>2024-09-30T14:12:40.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <category>Admin GraphQL API</category>
    <category>2024-10</category>
    <link>https://shopify.dev/changelog/introducing-theme-and-theme-file-management-in-the-admin-graphql-api</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/introducing-theme-and-theme-file-management-in-the-admin-graphql-api</guid>
  </item>
  <item>
    <title>Changing the default value of permitsSkuSharing argument in fulfillmentServiceCreate</title>
    <description><![CDATA[ <div class=""><p>As of <code>2025-01</code>, the default value for the <code>permitsSkuSharing</code> argument in the <code>fulfillmentServiceCreate</code> mutation has been updated to true. </p>
<p>Please be aware that this argument is deprecated and will be removed in the version <code>2025-04</code>. Consequently, all fulfillment services will be required to permit SKU sharing by default.</p>
</div> ]]></description>
    <pubDate>Wed, 25 Sep 2024 13:19:00 +0000</pubDate>
    <atom:published>2024-09-25T13:19:00.000Z</atom:published>
    <atom:updated>2024-09-25T14:12:24.000Z</atom:updated>
    <category>API</category>
    <category>Update</category>
    <category>Admin GraphQL API</category>
    <category>2025-01</category>
    <link>https://shopify.dev/changelog/changing-the-default-value-of-permitsskusharing-argument-in-fulfillmentservicecreate</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/changing-the-default-value-of-permitsskusharing-argument-in-fulfillmentservicecreate</guid>
  </item>
  <item>
    <title>Introducing metafield definition capabilities in the admin API</title>
    <description><![CDATA[ <div class=""><p>As of API version 2024-10, we're launching an API to manage metafield definition capabilities. This new feature provides a flexible and extensible way to define and manage behaviors for metafield definitions across various Shopify features.</p>
<h2>What's new?</h2>
<p>Metafield definition capabilities can be easily enabled, disabled, and queried through the Admin API</p>
<h2>What's next?</h2>
<p>In future API versions, we'll be introducing new capabilities to enhance metafield functionality across various Shopify features. Stay tuned for announcements about specific capabilities and how they can benefit your app or integration.</p>
<p>Learn more about metafield capabilities at <a href="https://shopify.dev/docs/apps/build/custom-data/metafields/use-metafield-capabilities" target="_blank" class="body-link">Shopify.dev</a></p>
</div> ]]></description>
    <pubDate>Fri, 20 Sep 2024 19:58:00 +0000</pubDate>
    <atom:published>2024-09-20T19:58:00.000Z</atom:published>
    <atom:updated>2024-09-20T23:22:35.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <category>Admin GraphQL API</category>
    <category>2024-10</category>
    <link>https://shopify.dev/changelog/introducing-metafield-definition-capabilities-in-the-admin-api</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/introducing-metafield-definition-capabilities-in-the-admin-api</guid>
  </item>
  <item>
    <title>Metafield Definition Capability Framework and Deprecation of `use_as_collection_condition`</title>
    <description><![CDATA[ <div class=""><p>As of API version 2024-10, we're introducing the Metafield Definition Capability Framework and deprecating the <code>use_as_collection_condition</code> field on the Metafield Definition object. The new <code>smart_collection_condition</code> capability will replace the deprecated field, providing a more flexible and extensible way to manage metafield behaviors in smart collections.</p>
<h2>What's changing?</h2>
<ul>
<li>The <code>use_as_collection_condition</code> field on Metafield Definitions is being deprecated.</li>
<li>A new <code>smart_collection_condition</code> capability is being introduced as part of the Metafield Definition Capability Framework.</li>
</ul>
<h2>Why it matters</h2>
<p>The new Capability Framework offers several benefits:</p>
<ol>
<li><strong>Improved flexibility</strong>: Capabilities can be easily added, removed, or modified without changing the core Metafield Definition structure.</li>
<li><strong>Better extensibility</strong>: New capabilities can be introduced in the future without affecting existing implementations.</li>
<li><strong>Clearer semantics</strong>: Capabilities provide a more explicit way to define metafield behaviors.</li>
</ol>
<h2>How to update</h2>
<p>To prepare for this change, update your API calls and app logic as follows:</p>
<ol>
<li><p>Instead of setting <code>use_as_collection_condition: true</code>, use:</p>
<pre><code class="language-graphql">capabilities: {
  smartCollectionCondition: {
    enabled: true
  }
}
</code></pre>
</li>
<li><p>When querying metafield definitions, check the <code>smart_collection_condition</code> capability instead of the <code>use_as_collection_condition</code> field:</p>
<pre><code class="language-graphql">query {
  metafieldDefinition(id: &quot;gid://shopify/MetafieldDefinition/1234&quot;) {
    capabilities {
      smartCollectionCondition {
        enabled
      }
    }
  }
}
</code></pre>
</li>
</ol>
<h2>Timeline</h2>
<ul>
<li><strong>API version 2024-10</strong>: The new capability is available, and <code>use_as_collection_condition</code> is deprecated but still functional.</li>
<li><strong>Future version</strong>: The <code>use_as_collection_condition</code> field will be removed entirely.</li>
</ul>
<p>We recommend updating your integrations to use the new capability as soon as possible to ensure a smooth transition.</p>
<p>Learn more about metafield capabilities at <a href="https://shopify.dev/docs/apps/build/custom-data/metafields/use-metafield-capabilities" target="_blank" class="body-link">Shopify.dev</a>
Learn more about the Metafield Definition Capability Framework at <a href="https://shopify.dev/docs/api/admin-graphql/latest/objects/MetafieldDefinition" target="_blank" class="body-link">Shopify.dev</a>.</p>
</div> ]]></description>
    <pubDate>Fri, 20 Sep 2024 19:35:00 +0000</pubDate>
    <atom:published>2024-09-20T19:35:00.000Z</atom:published>
    <atom:updated>2024-10-31T15:14:02.000Z</atom:updated>
    <category>Action Required</category>
    <category>API</category>
    <category>Deprecation announcement</category>
    <category>Admin GraphQL API</category>
    <category>2024-10</category>
    <link>https://shopify.dev/changelog/metafield-definition-capability-framework-and-deprecation-of-use_as_collection_condition</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/metafield-definition-capability-framework-and-deprecation-of-use_as_collection_condition</guid>
  </item>
  <item>
    <title>New inventory input fields in productSet mutation in version 2024-10</title>
    <description><![CDATA[ <div class=""><p>As of GraphQL API version <code>2024-10</code>, we are adding new inventory capabilities in the productSet mutation, in the form of a new field type <strong><code>ProductSetInventoryInput</code></strong>, which allows setting <code>available</code> or <code>on_hand</code> quantities for new and existing product variants on locations  specified.</p>
<p>This type can be used in the following contexts:</p>
<ul>
<li><p><code>ProductSetInput.inventoryQuantities</code> field to specify inventory quantities for products with no custom variants.</p>
</li>
<li><p><code>ProductSetVariantInput.inventoryQuantities</code> field to specify inventory quantities for individual custom variants.</p>
</li>
</ul>
<p>For more detailed information and examples, visit our <a href="https://shopify.dev/docs/api/admin-graphql/2024-10/mutations/productSet" target="_blank" class="body-link">productSet documentation</a> on Shopify.dev.</p>
</div> ]]></description>
    <pubDate>Thu, 19 Sep 2024 04:00:00 +0000</pubDate>
    <atom:published>2024-09-19T04:00:00.000Z</atom:published>
    <atom:updated>2024-10-02T19:21:51.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <category>Admin GraphQL API</category>
    <category>2024-10</category>
    <link>https://shopify.dev/changelog/new-inventory-input-fields-in-productset-mutation-in-version-2024-10</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/new-inventory-input-fields-in-productset-mutation-in-version-2024-10</guid>
  </item>
  <item>
    <title>Shopify CLI is now easier to install and faster for Liquid theme development</title>
    <description><![CDATA[ <div class=""><p>Today, a new version of Shopify CLI is available, bringing with it a better development experience that streamlines your setup for building Shopify themes.</p>
<p>The update includes the following improvements:</p>
<ul>
<li>Instant development server startup, so there's no need to wait for synchronization before opening a browser.</li>
<li>No dependency on Ruby and unified commands implementation on TypeScript, which streamlines your development cycle with easier install &amp; setup.</li>
<li>A headless Liquid console, so you can run <code>shopify theme console</code> without opening a browser for authentication.</li>
</ul>
<p>Learn more about <a href="https://shopify.dev/docs/storefronts/themes/tools/cli" target="_blank" class="body-link">Shopify CLI for themes</a>. Happy coding!</p>
</div> ]]></description>
    <pubDate>Wed, 18 Sep 2024 19:00:00 +0000</pubDate>
    <atom:published>2024-09-18T19:00:00.000Z</atom:published>
    <atom:updated>2024-09-18T19:00:00.000Z</atom:updated>
    <category>Themes</category>
    <category>Update</category>
    <link>https://shopify.dev/changelog/shopify-cli-is-now-easier-to-install-and-faster-for-liquid-theme-development</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/shopify-cli-is-now-easier-to-install-and-faster-for-liquid-theme-development</guid>
  </item>
  <item>
    <title>New Full-Funnel Theme Install Parameters and Now Firing E-Commerce Events on the Theme Listing Page</title>
    <description><![CDATA[ <div class=""><p>Two new paremeters have been added  to the full-funnel theme install event for the Shopify Theme Store - <code>shop_name</code> and <code>shop_url</code>. These enhancements provide more insights on which merchant is installing a theme.</p>
<p>Learn more about the new parameters and full-funnel attribution in the <a href="https://shopify.dev/docs/storefronts/themes/store/review-process/listings#full-funnel-theme-install-attributions" target="_blank" class="body-link">Shopify Theme Store docs</a>.</p>
<p>On the theme listing pages, Google e-commerce events have also been implemented to enhance tracking capabilities. The events <a href="https://developers.google.com/analytics/devguides/collection/ga4/reference/events?sjid=2649380085872637034-NC&client_type=gtag#view_item" target="_blank" class="body-link">view_item</a> and <a href="https://developers.google.com/analytics/devguides/collection/ga4/reference/events?sjid=2649380085872637034-NC&client_type=gtag#add_to_cart" target="_blank" class="body-link">add_to_cart</a> will now be sent to Google Analytics, allowing for more precise data analysis.</p>
<p>For further details, check out the section on Google e-commerce events in the <a href="https://shopify.dev/docs/storefronts/themes/store/review-process/listings#google-e-commerce-events" target="_blank" class="body-link">Shopify Theme Store docs</a>.</p>
</div> ]]></description>
    <pubDate>Wed, 18 Sep 2024 14:22:00 +0000</pubDate>
    <atom:published>2024-09-18T14:22:00.000Z</atom:published>
    <atom:updated>2024-09-18T20:49:04.000Z</atom:updated>
    <category>Themes</category>
    <category>New</category>
    <link>https://shopify.dev/changelog/new-full-funnel-theme-install-parameters-and-now-firing-e-commerce-events-on-the-theme-listing-page</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/new-full-funnel-theme-install-parameters-and-now-firing-e-commerce-events-on-the-theme-listing-page</guid>
  </item>
  <item>
    <title>JavaScript Shopify Functions are now ~40% faster </title>
    <description><![CDATA[ <div class=""><p>As of Shopify CLI 3.67 and Javy 3.1, Shopify Functions built in JavaScript can see improved performance by as much as 40% when combined with <a href="https://github.com/Shopify/shopify-function-javascript/releases/tag/v1.0.0" target="_blank" class="body-link">@shopify/shopify_function 1.0</a></p>
<p>Learn more about JavaScript for Shopify Functions on <a href="https://shopify.dev/docs/apps/build/functions/programming-languages/javascript-for-functions" target="_blank" class="body-link">Shopify.dev</a>.</p>
</div> ]]></description>
    <pubDate>Wed, 18 Sep 2024 14:19:00 +0000</pubDate>
    <atom:published>2024-09-18T14:19:00.000Z</atom:published>
    <atom:updated>2024-09-18T14:28:43.000Z</atom:updated>
    <category>Tools</category>
    <category>Update</category>
    <link>https://shopify.dev/changelog/javascript-shopify-functions-are-now-40-faster</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/javascript-shopify-functions-are-now-40-faster</guid>
  </item>
  <item>
    <title>New Full-Funnel App Install Parameters and Now Firing E-Commerce Events on the App Listing Page</title>
    <description><![CDATA[ <div class=""><p>Two new paremeters have been added  to the full-funnel app install event for the Shopify App Store - <code>shop_name</code> and <code>shop_url</code>. These enhancements provide more insights on which merchant is installing an app.</p>
<p>Learn more about the new parameters and full-funnel attribution in the <a href="https://shopify.dev/docs/apps/launch/marketing/track-listing-traffic#full-funnel-app-install-attributions" target="_blank" class="body-link">Shopify App Store docs</a>.</p>
<p>On the app listing pages, Google e-commerce events have also been implemented to enhance tracking capabilities. The events <a href="https://developers.google.com/analytics/devguides/collection/ga4/reference/events?sjid=2649380085872637034-NC&client_type=gtag#view_item" target="_blank" class="body-link">view_item</a> and <a href="https://developers.google.com/analytics/devguides/collection/ga4/reference/events?sjid=2649380085872637034-NC&client_type=gtag#add_to_cart" target="_blank" class="body-link">add_to_cart</a> will now be sent to Google Analytics, allowing for more precise data analysis.</p>
<p>For further details, check out the section on Google e-commerce events in the <a href="https://shopify.dev/docs/apps/launch/marketing/track-listing-traffic#google-e-commerce-events" target="_blank" class="body-link">Shopify App Store docs</a>.</p>
</div> ]]></description>
    <pubDate>Wed, 18 Sep 2024 13:42:00 +0000</pubDate>
    <atom:published>2024-09-18T13:42:00.000Z</atom:published>
    <atom:updated>2024-09-18T20:49:16.000Z</atom:updated>
    <category>App store</category>
    <category>New</category>
    <link>https://shopify.dev/changelog/new-full-funnel-app-install-parameters-and-now-firing-e-commerce-events-on-the-app-listing-page</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/new-full-funnel-app-install-parameters-and-now-firing-e-commerce-events-on-the-app-listing-page</guid>
  </item>
  <item>
    <title>Product Feed webhooks now support per-market inventory</title>
    <description><![CDATA[ <div class=""><p>The <code>quantityAvailable</code> and <code>availableForSale</code> fields will now reflect country-specific inventory availability, scoped to the specified market country of the Product Feed. The Fulfillable Inventory feature must be enabled on the shop.</p>
<p>Learn more about Fulfillable Inventory on the <a href="https://help.shopify.com/en/manual/shipping/setting-up-and-managing-your-shipping/fulfillable-inventory?shpxid=9f72f39f-880B-480B-6688-54167E11AB9A" target="_blank" class="body-link">Shopify help docs</a>.</p>
</div> ]]></description>
    <pubDate>Wed, 18 Sep 2024 13:00:00 +0000</pubDate>
    <atom:published>2024-09-18T13:00:00.000Z</atom:published>
    <atom:updated>2024-09-18T13:00:00.000Z</atom:updated>
    <category>API</category>
    <category>Update</category>
    <category>Events &amp; webhooks</category>
    <link>https://shopify.dev/changelog/product-feed-webhooks-now-support-per-market-inventory</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/product-feed-webhooks-now-support-per-market-inventory</guid>
  </item>
  <item>
    <title> Post-purchase offers limit is increased</title>
    <description><![CDATA[ <div class=""><p>The number of post-purchase upsell offers that customers can accept has been increased from two to three. With this change, merchants can increase their order value even more through post-purchase upsell offers.</p>
<p>We highly recommend that you review any custom code that pertains to post-purchase offers to ensure an optimal buyer experience.</p>
<p>Learn more about post purchase offers on <a href="https://shopify.dev/docs/apps/build/checkout/product-offers/build-a-post-purchase-offer" target="_blank" class="body-link">shopify.dev</a></p>
</div> ]]></description>
    <pubDate>Tue, 17 Sep 2024 17:00:00 +0000</pubDate>
    <atom:published>2024-09-17T17:00:00.000Z</atom:published>
    <atom:updated>2024-09-18T15:22:58.000Z</atom:updated>
    <category>Platform</category>
    <category>Update</category>
    <link>https://shopify.dev/changelog/post-purchase-offers-limit-is-increased</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/post-purchase-offers-limit-is-increased</guid>
  </item>
  <item>
    <title>Improvements in the GiftCard GraphQL endpoints and introducing GiftCardTransaction types</title>
    <description><![CDATA[ <div class=""><p>As of the GraphQL Admin API version 2024-10, we're improving the <code>GiftCard</code> endpoints and introducing <code>GiftCardTransaction</code> types. The gift card endpoints are now open to all apps and shops, with no additional approval scopes or flags required. </p>
<p>We have added the following mutations:</p>
<ul>
<li><code>giftCardDeactivate</code> renamed from <code>giftCardDisable</code> (deprecated).</li>
<li><code>giftCardCredit</code> to apply credit to a gift card returning a <code>GiftCardCreditTransaction</code>.</li>
<li><code>giftCardDebit</code> to apply debit to a gift card returning a <code>GiftCardDebitTransaction</code>.</li>
<li><code>giftCardSendNotificationToCustomer</code> to send the notification to the customer.</li>
<li><code>giftCardSendNotificationToRecipient</code> to send the notification to the recipient.</li>
</ul>
<p>We have updated the following mutations:</p>
<ul>
<li><code>giftCardCreate</code> to add <code>recipientAttributes</code>.</li>
<li><code>giftCardUpdate</code> to add <code>recipientAttributes</code>.</li>
</ul>
<p>We have added and modified fields in the <code>GiftCard</code> object:</p>
<ul>
<li>Added <code>updatedAt</code>.</li>
<li>Added <code>recipientAttributes</code>.</li>
<li>Added <code>transactions</code> returning all transactions created by credits and debits.</li>
<li>Renamed <code>disabledAt</code> to <code>deactivatedAt</code> (deprecated).</li>
</ul>
<h3>Developer action required</h3>
<p>Developers using the existing <code>giftCardDisable</code> mutation will need to replace it with <code>giftCardDeactivate</code></p>
<p>Developers using the <code>disableAt</code> property on the <code>GiftCard</code> object will need to replace it with <code>deactivatedAt</code></p>
<p>To learn more about gift cards, refer to the <a href="https://shopify.dev/docs/api/admin-graphql/2024-10/objects/GiftCard" target="_blank" class="body-link">gift cards</a> documentation. To learn more about gift card recipient functionality, refer to the help center documentation for <a href="https://help.shopify.com/en/manual/online-store/themes/customizing-themes/add-gift-card-recipient-fields" target="_blank" class="body-link">recipient fields</a></p>
</div> ]]></description>
    <pubDate>Tue, 17 Sep 2024 12:00:00 +0000</pubDate>
    <atom:published>2024-09-17T12:00:00.000Z</atom:published>
    <atom:updated>2024-09-17T14:55:11.000Z</atom:updated>
    <category>Action Required</category>
    <category>API</category>
    <category>Update</category>
    <category>Admin GraphQL API</category>
    <category>2024-10</category>
    <link>https://shopify.dev/changelog/improvements-in-the-giftcard-graphql-endpoints-and-introducing-giftcardtransaction-types</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/improvements-in-the-giftcard-graphql-endpoints-and-introducing-giftcardtransaction-types</guid>
  </item>
  <item>
    <title>The fulfillmentOrdersReleaseHolds Mutation Is Deprecated</title>
    <description><![CDATA[ <div class=""><p>As of the Admin API version 2024-10, the <a href="https://shopify.dev/docs/api/admin-graphql/2024-07/mutations/fulfillmentOrdersReleaseHolds" target="_blank" class="body-link">fulfillmentOrdersReleaseHolds</a> mutation has been deprecated.</p>
<p>Apps using this mutation should migrate to using the <a href="https://shopify.dev/docs/api/admin-graphql/latest/mutations/fulfillmentOrderReleaseHold" target="_blank" class="body-link">fulfillmentOrderReleaseHold</a> mutation instead.</p>
</div> ]]></description>
    <pubDate>Mon, 16 Sep 2024 14:53:00 +0000</pubDate>
    <atom:published>2024-09-16T14:53:00.000Z</atom:published>
    <atom:updated>2024-09-16T15:02:39.000Z</atom:updated>
    <category>Action Required</category>
    <category>API</category>
    <category>Deprecation announcement</category>
    <category>Admin GraphQL API</category>
    <category>2024-10</category>
    <link>https://shopify.dev/changelog/the-fulfillmentordersreleaseholds-mutation-is-deprecated</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/the-fulfillmentordersreleaseholds-mutation-is-deprecated</guid>
  </item>
  <item>
    <title>Admin API includes `urlRedirectsCount`</title>
    <description><![CDATA[ <div class=""><p>As of Admin GraphQL API version <code>2024-10</code>, you can access <code>QueryRoot.urlRedirectsCount</code> field to retrieve the count of redirects.</p>
<p>Learn more about <code>urlRedirectsCount</code> on <a href="https://shopify.dev/docs/api/admin-graphql/2024-10/queries/urlRedirectsCount" target="_blank" class="body-link">Shopify.dev</a>.</p>
</div> ]]></description>
    <pubDate>Mon, 16 Sep 2024 14:00:00 +0000</pubDate>
    <atom:published>2024-09-16T14:00:00.000Z</atom:published>
    <atom:updated>2024-09-16T14:00:00.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <category>Admin GraphQL API</category>
    <category>2024-10</category>
    <link>https://shopify.dev/changelog/admin-api-includes-urlredirectscount</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/admin-api-includes-urlredirectscount</guid>
  </item>
  <item>
    <title>New query attributes on products query</title>
    <description><![CDATA[ <div class=""><p>As of the <strong>2024-10</strong> version of the GraphQL Admin API, the <code>products</code> query filter has been expanded to allow filtering on additional attributes: <code>publication_ids</code>, <code>variant_id</code> and <code>variant_title</code>.</p>
<p>Check out all <a href="https://shopify.dev/docs/api/admin-graphql/2024-10/queries/products#argument-query" target="_blank" class="body-link">products query attributes</a> at <a href="https://shopify.dev/" target="_blank" class="body-link">shopify.dev</a> for more details.</p>
</div> ]]></description>
    <pubDate>Mon, 16 Sep 2024 12:00:00 +0000</pubDate>
    <atom:published>2024-09-16T12:00:00.000Z</atom:published>
    <atom:updated>2024-09-16T12:00:00.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <category>Admin GraphQL API</category>
    <category>2024-10</category>
    <link>https://shopify.dev/changelog/new-query-attributes-on-products-query</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/new-query-attributes-on-products-query</guid>
  </item>
  <item>
    <title>Field deprecations on the abandoned checkout REST API</title>
    <description><![CDATA[ <div class=""><p>The following fields have been deprecated  from the <a href="https://shopify.dev/docs/api/admin-rest/unstable/resources/abandoned-checkouts" target="_blank" class="body-link">Abandoned Checkout REST API</a>: <code>cart_token</code>, <code>closed_at</code>, <code>currency</code>, <code>gateway</code>, <code>landing_site</code>, <code>fulfillment_service</code>, <code>grams</code>, <code>presentment_currency</code>, <code>referring_site</code>, <code>shipping_lines</code>, <code>token</code> and <code>total_weight</code> fields</p>
<p>As of 2024-10, the endpoint is available via the <a href="https://shopify.dev/changelog/new-abandoned-checkouts-listing-endpoint-on-the-admin-graphql-api" target="_blank" class="body-link">newly published GraphQL abandoned checkout API</a>. </p>
</div> ]]></description>
    <pubDate>Fri, 13 Sep 2024 17:12:00 +0000</pubDate>
    <atom:published>2024-09-13T17:12:00.000Z</atom:published>
    <atom:updated>2024-09-16T21:01:24.000Z</atom:updated>
    <category>Action Required</category>
    <category>API</category>
    <category>Deprecation announcement</category>
    <category>Admin REST API</category>
    <category>2024-10</category>
    <link>https://shopify.dev/changelog/field-deprecations-on-the-abandoned-checkout-rest-api</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/field-deprecations-on-the-abandoned-checkout-rest-api</guid>
  </item>
  <item>
    <title>Fulfillment Holds Now Able To Be Released by ID</title>
    <description><![CDATA[ <div class=""><p>As of the GraphQL Admin API version 2024-10, a <code>id</code>  field is being added to the <code>FulfillmentHold</code> GraphQL object.</p>
<p>As of the GraphQL Admin API version 2024-10, an optional <code>holdIds</code>  argument is being added to  the <a href="https://shopify.dev/docs/api/admin-graphql/2024-10/mutations/fulfillmentOrderReleaseHold" target="_blank" class="body-link">fulfillmentOrderReleaseHold</a>  mutation. This will give apps the ability to release a hold by ID, ensuring that only the intended hold is released. <strong>It is highly recommended that apps supply the ids of any holds when releasing them</strong>. Releasing all holds on a fulfillment order will result in the fulfillment order being released prematurely and items being incorrectly fulfilled.</p>
</div> ]]></description>
    <pubDate>Fri, 13 Sep 2024 15:16:00 +0000</pubDate>
    <atom:published>2024-09-13T15:16:00.000Z</atom:published>
    <atom:updated>2024-09-16T08:10:58.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <category>Admin GraphQL API</category>
    <category>2024-10</category>
    <link>https://shopify.dev/changelog/fulfillment-holds-now-able-to-be-released-by-id</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/fulfillment-holds-now-able-to-be-released-by-id</guid>
  </item>
  <item>
    <title>Admin API includes `statusPageUrl` field on `Order`</title>
    <description><![CDATA[ <div class=""><p>As of Admin GraphQL API version <code>2024-10</code>, you can access <code>Order.statusPageUrl</code> field to retrieve the URL where the customer can check the order's current status.</p>
<p>Learn more about <code>Order</code> on <a href="https://shopify.dev/docs/api/admin-graphql/2024-10/objects/Order#field-statuspageurl" target="_blank" class="body-link">Shopify.dev</a>.</p>
</div> ]]></description>
    <pubDate>Fri, 13 Sep 2024 14:00:00 +0000</pubDate>
    <atom:published>2024-09-13T14:00:00.000Z</atom:published>
    <atom:updated>2024-09-13T15:01:45.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <category>Admin GraphQL API</category>
    <category>2024-10</category>
    <link>https://shopify.dev/changelog/admin-api-includes-statuspageurl-field-on-order</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/admin-api-includes-statuspageurl-field-on-order</guid>
  </item>
  <item>
    <title>Customer SMS Consent Collected From now returns Shopify when the buyer consents to SMS marketing in Shopify Checkout</title>
    <description><![CDATA[ <div class=""><p>As of September 12, 2024, the <a href="https://shopify.dev/docs/api/admin-graphql/2024-07/enums/CustomerConsentCollectedFrom" target="_blank" class="body-link"><code>CustomerConsentCollectedFrom</code> field</a> will return <code>SHOPIFY</code> whenever SMS consent is captured in Shopify Checkout. Previously, it would return <code>OTHER</code> if the buyer consented to SMS marketing in checkout, but the sales channel of the checkout was not one owned by Shopify (Example, online store checkouts would return <code>SHOPIFY</code> while custom storefronts would return <code>OTHER</code>).</p>
<p>This applies to both the 1st party SMS consent UI, as well as any checkout UI extensions using the <a href="https://shopify.dev/docs/api/checkout-ui-extensions/2024-07/components/forms/consentcheckbox" target="_blank" class="body-link"><code>ConsentCheckbox</code></a> or <a href="https://shopify.dev/docs/api/checkout-ui-extensions/2024-07/components/forms/consentphonefield" target="_blank" class="body-link"><code>ConsentPhoneField</code></a> UI components.</p>
<p>Other SMS consent capture flows are unaffected.</p>
</div> ]]></description>
    <pubDate>Thu, 12 Sep 2024 17:25:00 +0000</pubDate>
    <atom:published>2024-09-12T17:25:00.000Z</atom:published>
    <atom:updated>2024-12-13T22:24:41.000Z</atom:updated>
    <category>API</category>
    <category>Update</category>
    <category>Admin GraphQL API</category>
    <category>Admin REST API</category>
    <category>Events &amp; webhooks</category>
    <category>2024-07</category>
    <link>https://shopify.dev/changelog/customer-sms-consent-collected-from-now-returns-shopify-when-the-buyer-consents-to-sms-marketing-in-shopify-checkout</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/customer-sms-consent-collected-from-now-returns-shopify-when-the-buyer-consents-to-sms-marketing-in-shopify-checkout</guid>
  </item>
  <item>
    <title>Hydrogen September 2024 release</title>
    <description><![CDATA[ <div class=""><p>Hydrogen v2024.7.5 is out today. The September 2024 Hydrogen release contains several optimizations and bug fixes, including:</p>
<ul>
<li>Improved sitemaps (unstable) (<a href="https://github.com/Shopify/hydrogen/pull/2478" target="_blank" class="body-link">#2478</a>)</li>
<li>Skeleton template search enhancements (<a href="https://github.com/Shopify/hydrogen/pull/2363" target="_blank" class="body-link">#2363</a>)</li>
<li>Cart gift card support (<a href="https://github.com/Shopify/hydrogen/pull/2298" target="_blank" class="body-link">#2298</a>)</li>
<li>Consent localization (<a href="https://github.com/Shopify/hydrogen/pull/2457" target="_blank" class="body-link">#2457</a>)</li>
<li>Improved content security policy implementation (<a href="https://github.com/Shopify/hydrogen/pull/2500" target="_blank" class="body-link">#2500</a>)</li>
<li>Infinite redirect fix for with URLs with <code>//</code> (<a href="https://github.com/Shopify/hydrogen/pull/2449" target="_blank" class="body-link">#2449</a>)</li>
<li>Improved <code>useOptimisticCart</code> to optimistically calculate totals (<a href="https://github.com/Shopify/hydrogen/pull/2459" target="_blank" class="body-link">#2459</a>)</li>
<li>Skeleton template mobile device link fix (<a href="https://github.com/Shopify/hydrogen/pull/2450" target="_blank" class="body-link">#2450</a>)</li>
<li>Utilities <code>privacyBanner</code> and <code>customerPrivacy</code> have been added to <code>useAnalytics</code> and <code>useCustomerPrivacy</code> (<a href="https://github.com/Shopify/hydrogen/pull/2457" target="_blank" class="body-link">#2457</a>)</li>
</ul>
<p>Check out our full <a href="https://hydrogen.shopify.dev/update/september-2024" target="_blank" class="body-link">Hydrogen September 2024 release blog post</a> for more details. And please drop your comments, feedback, and suggestions in <a href="https://github.com/Shopify/hydrogen/discussions" target="_blank" class="body-link">GitHub Discussions</a>!</p>
</div> ]]></description>
    <pubDate>Thu, 12 Sep 2024 01:45:00 +0000</pubDate>
    <atom:published>2024-09-12T01:45:00.000Z</atom:published>
    <atom:updated>2024-09-12T01:53:06.000Z</atom:updated>
    <category>Platform</category>
    <category>Update</category>
    <link>https://shopify.dev/changelog/hydrogen-september-2024-release</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/hydrogen-september-2024-release</guid>
  </item>
  <item>
    <title>Introducing PRODUCT_CATEGORY_ID in CollectionRuleColumn and Deprecating PRODUCT_TAXONOMY_NODE_ID for automated collection creation</title>
    <description><![CDATA[ <div class=""><p>As of API version 2024-10, we're adding the new <strong>PRODUCT_CATEGORY_ID</strong> as a column for the <code>CollectionRuleColumn</code> which is <a href="https://shopify.dev/docs/api/admin-graphql/unstable/enums/CollectionRuleColumn" target="_blank" class="body-link">used to create automated collections</a>. This field maps directly to the newly added Product Category as defined in the <a href="https://github.com/Shopify/product-taxonomy/tree/main" target="_blank" class="body-link">updated standard product taxonomy</a> and will allow for the creation of smart collections based on this new category tree.</p>
<h3>What's new?</h3>
<ul>
<li><strong>Introduction of <code>PRODUCT_CATEGORY_ID</code> Column</strong>: We are introducing a new column, <code>PRODUCT_CATEGORY_ID</code>, in the <code>CollectionRuleColumn</code>. This column will directly map to the category ID of a product, allowing for more precise and efficient collection rule creation based on product categories as defined in the <a href="https://github.com/Shopify/product-taxonomy/tree/main" target="_blank" class="body-link">updated standard product taxonomy</a>.</li>
</ul>
<h3>What's deprecated?</h3>
<ul>
<li><strong>Deprecation of <code>PRODUCT_TAXONOMY_NODE_ID</code> Column</strong>: The <code>PRODUCT_TAXONOMY_NODE_ID</code> column is being deprecated. This column previously used the now-deprecated <code>productCategory</code> field on products, the previous method for categorising products before the <a href="https://github.com/Shopify/product-taxonomy/tree/main" target="_blank" class="body-link">updated standard product taxonomy</a> was introduced this year. Developers should transition to using the new <code>PRODUCT_CATEGORY_ID</code> column to ensure newly created products that necessarily use the updated product taxonomy are included in automated collections as expected.</li>
</ul>
<h3>Developer action required</h3>
<p>Developers are encouraged to update their implementations to use the new <code>PRODUCT_CATEGORY_ID</code> column when specifying product attributes for populating smart collections. The deprecated <code>PRODUCT_TAXONOMY_NODE_ID</code> will remain functional but is scheduled for removal in a future API version. Transitioning early will ensure smoother operations and access to the enhanced functionality provided by the new schema.</p>
<h3>Example of updated usage</h3>
<p>To create a smart collection using the new <code>PRODUCT_CATEGORY_ID</code>, modify the collection creation mutation as follows:</p>
<pre><code class="language-graphql">mutation CollectionCreate($input: CollectionInput!) {
  collectionCreate(input: $input) {
    userErrors {
      field
      message
    }
    collection {
      id
      title
      descriptionHtml
      handle
      sortOrder
      ruleSet {
        appliedDisjunctively
        rules {
          column
          relation
          condition
        }
      }
    }
  }
}
{
  &quot;input&quot;: {
    &quot;title&quot;: &quot;Our entire shoe collection&quot;,
    &quot;descriptionHtml&quot;: &quot;View &lt;b&gt;every&lt;/b&gt; shoe available in our store.&quot;,
    &quot;ruleSet&quot;: {
      &quot;appliedDisjunctively&quot;: false,
      &quot;rules&quot;: {
        &quot;column&quot;: &quot;PRODUCT_CATEGORY_ID&quot;,
        &quot;relation&quot;: &quot;EQUALS&quot;,
        &quot;condition&quot;: &quot;gid://shopify/TaxonomyCategory/aa-5&quot; 
      }
    }
  }
}

Learn more about collection creation at [Shopify.dev](https://shopify.dev/docs/api/admin-graphql/latest/mutations/collectionCreate)






</code></pre>
</div> ]]></description>
    <pubDate>Wed, 11 Sep 2024 22:10:00 +0000</pubDate>
    <atom:published>2024-09-11T22:10:00.000Z</atom:published>
    <atom:updated>2024-09-11T23:17:17.000Z</atom:updated>
    <category>Action Required</category>
    <category>API</category>
    <category>Deprecation announcement</category>
    <category>Admin GraphQL API</category>
    <category>Admin REST API</category>
    <category>2024-10</category>
    <link>https://shopify.dev/changelog/introducing-product_category_id-in-collectionrulecolumn-and-deprecating-product_taxonomy_node_id-for-automated-collection-creation</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/introducing-product_category_id-in-collectionrulecolumn-and-deprecating-product_taxonomy_node_id-for-automated-collection-creation</guid>
  </item>
  <item>
    <title>Updates to webhook retry mechanism</title>
    <description><![CDATA[ <div class=""><p>Webhooks will now be retried a total of 8 times over 4 hours using an exponential backoff schedule.  This should allow sufficient time for transient errors to be resolved.</p>
<p>When webhooks are retried, they will be delivered with the original payload from the time they were triggered.  Partners should utilize the <code>X-Shopify-Triggered-At</code> timestamp in the header, or a timestamp from the payload to determine if the payload is stale.</p>
<p>Retried webhooks will be delivered to the subscription's address that was configured when the webhook was triggered.  Updating the subscription's address during a retry cycle will not result in the webhook being delivered to the new address.  When migrating webhooks to a new endpoint, it is recommended to keep both endpoints active for a short period of time to ensure a smooth transition.</p>
<p>These changes aim to improve the consistency, efficiency and reliability of webhook delivery while minimizing the impact on partners.</p>
</div> ]]></description>
    <pubDate>Tue, 10 Sep 2024 15:14:00 +0000</pubDate>
    <atom:published>2024-09-10T15:14:00.000Z</atom:published>
    <atom:updated>2024-09-10T15:14:00.000Z</atom:updated>
    <category>API</category>
    <category>Update</category>
    <category>Events &amp; webhooks</category>
    <link>https://shopify.dev/changelog/updates-to-webhook-retry-mechanism</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/updates-to-webhook-retry-mechanism</guid>
  </item>
  <item>
    <title>Static app navigation for admin apps is no longer supported</title>
    <description><![CDATA[ <div class=""><p>Static app navigation for admin apps is no longer supported. Creation and editing of static navigation are no longer available on the the Partners dashboard. You can delete existing menus using the Partners dashboard until December 2024. After December 2026, static navigation items will be automatically removed from apps.</p>
<p>To configure app navigation,  use the App Bridge navigation menu <a href="https://shopify.dev/docs/api/app-bridge-library/web-components/ui-nav-menu" target="_blank" class="body-link">web component</a> or <a href="https://shopify.dev/docs/api/app-bridge-library/react-components/navmenu-component" target="_blank" class="body-link">React component</a> to add navigation to your app and delete the existing navigation items from the Partners dashboard.</p>
</div> ]]></description>
    <pubDate>Mon, 09 Sep 2024 16:31:00 +0000</pubDate>
    <atom:published>2024-09-09T16:31:00.000Z</atom:published>
    <atom:updated>2024-09-09T17:45:49.000Z</atom:updated>
    <category>Tools</category>
    <category>Deprecation announcement</category>
    <link>https://shopify.dev/changelog/static-app-navigation-for-admin-apps-is-no-longer-supported</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/static-app-navigation-for-admin-apps-is-no-longer-supported</guid>
  </item>
  <item>
    <title>Removing V2 suffix from fulfillmentCreateV2 and fulfillmentTrackingInfoUpdateV2</title>
    <description><![CDATA[ <div class=""><p>As of <code>2024-10</code>, we're deprecating <code>fulfillmentCreateV2</code> and <code>fulfillmentTrackingInfoUpdateV2</code>. Instead, please use <code>fulfillmentCreate</code> and <code>fulfillmentTrackingInfoUpdate</code>.</p>
<p>Note that the behavior of the new mutations remains the same as the previous ones; the only change is the removal of V2 to ensure consistent naming across all mutations.</p>
</div> ]]></description>
    <pubDate>Mon, 09 Sep 2024 15:32:00 +0000</pubDate>
    <atom:published>2024-09-09T15:32:00.000Z</atom:published>
    <atom:updated>2024-09-10T09:56:53.000Z</atom:updated>
    <category>Action Required</category>
    <category>API</category>
    <category>Deprecation announcement</category>
    <category>Admin GraphQL API</category>
    <category>2024-10</category>
    <link>https://shopify.dev/changelog/removing-v2-suffix-from-fulfillmentcreatev2-and-fulfillmenttrackinginfoupdatev2</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/removing-v2-suffix-from-fulfillmentcreatev2-and-fulfillmenttrackinginfoupdatev2</guid>
  </item>
  <item>
    <title>The REST location resource requires `locations` scope</title>
    <description><![CDATA[ <div class=""><p>As of the <strong>2024-10</strong> release of the Admin REST API, the location resource will be gated by the <code>locations</code> scope.</p>
<p>Attempting to access the <a href="https://shopify.dev/docs/api/admin-rest/2024-10/resources/location#resource-object" target="_blank" class="body-link">location resource</a> without the <code>read_locations</code> scope will return a <code>403 Forbidden</code> <a href="https://shopify.dev/docs/api/admin-rest#status_and_error_codes" target="_blank" class="body-link">error</a>.
If your app gets the location resource, then you will need to request the correct <code>read_locations</code> scope before migrating to the 2024-10 API version.</p>
</div> ]]></description>
    <pubDate>Mon, 09 Sep 2024 14:00:00 +0000</pubDate>
    <atom:published>2024-09-09T14:00:00.000Z</atom:published>
    <atom:updated>2024-09-09T14:00:00.000Z</atom:updated>
    <category>Action Required</category>
    <category>API</category>
    <category>Deprecation announcement</category>
    <category>Admin REST API</category>
    <category>2024-10</category>
    <link>https://shopify.dev/changelog/the-rest-location-resource-requires-locations-scope</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/the-rest-location-resource-requires-locations-scope</guid>
  </item>
  <item>
    <title>Fresh theme rows for Theme Store homepage</title>
    <description><![CDATA[ <div class=""><p>To help merchants discover the freshest and most well-integrated themes for their store, we've shipped an update to the Theme Store homepage to highlight Top and New themes (published in the last 60 days).</p>
</div> ]]></description>
    <pubDate>Fri, 06 Sep 2024 19:16:00 +0000</pubDate>
    <atom:published>2024-09-06T19:16:00.000Z</atom:published>
    <atom:updated>2024-09-06T21:38:45.000Z</atom:updated>
    <category>Shopify Theme Store</category>
    <category>Update</category>
    <link>https://shopify.dev/changelog/fresh-theme-rows-for-theme-store-homepage</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/fresh-theme-rows-for-theme-store-homepage</guid>
  </item>
  <item>
    <title>Storefront Product Taxonomy Category API</title>
    <description><![CDATA[ <div class=""><p>As of GraphQL Storefront API <strong>2024-10</strong>, you can now retrieve product taxonomy categories in storefronts. This information is also available through the Liquid API.</p>
<p>This will allow you to customize the buyer experience in storefronts based on product taxonomy. Learn more about product taxonomy in <a href="https://help.shopify.com/en/manual/products/details/product-category" target="_blank" class="body-link">our help docs</a>.</p>
<p>See Shopify.dev for documentation on the <a href="https://shopify.dev/docs/api/liquid/objects#taxonomy_category" target="_blank" class="body-link">new Liquid object</a> and the <a href="https://shopify.dev/docs/api/storefront/unstable/objects/TaxonomyCategory" target="_blank" class="body-link">upcoming GraphQL type</a>.</p>
</div> ]]></description>
    <pubDate>Thu, 05 Sep 2024 21:48:00 +0000</pubDate>
    <atom:published>2024-09-05T21:48:00.000Z</atom:published>
    <atom:updated>2024-09-06T17:00:56.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <category>Liquid</category>
    <category>Storefront API</category>
    <category>2024-10</category>
    <link>https://shopify.dev/changelog/storefront-product-taxonomy-category-api</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/storefront-product-taxonomy-category-api</guid>
  </item>
  <item>
    <title>Allow item activation at legacy location</title>
    <description><![CDATA[ <div class=""><!-- **IMPORTANT:** Posts won't go live, including at the scheduled date, unless they're reviewed and approved. Due to reduced resources, the dev docs team doesn't have the capacity to review changelog posts at this time. We recommend getting a member of the product team behind the change to do the review. 

Write a summary of the change. Check out the Developer changelog guidelines in the Vault: https://vault.shopify.io/pages/3468-Developer-changelog-posts. You can use markdown or the toolbar inserts to format text.

Here are some suggested formats for writing 2-3 sentences with an overview of the change and how it benefits or affects developers:

As of { API and version }, you can use the {object or resource} to {do something new}.
or
As of { API and version }, we're deprecating { description }. Use the { object or resource } instead.
or
You can now use { thing } to { do something new }.
or
We've added { thing } so that you can { do something }.

Describe any benefits { thing } has, or any action developers need to take and when they need to take it.
 
You can include links inline in the text, and add another link at the end in this format:

Learn more about { thing } on [Shopify.dev](URL).
-->
<p>As of Graphql Admin Api version <strong>2024-10</strong>, calls to mutation <code>inventoryActivate</code> can use an optional parameter <code>stockAtLegacyLocation</code>. Setting this parameter to <code>true</code> will allow inventory to be activated if the <code>locationId</code> provided is associated with a fulfillment service that does not permit sku sharing.</p>
<p>If an item is activated at a location that does not permit sku sharing then the item will be deactivated at all other locations.</p>
<p>If an item is currently active at a location that does not permit sku sharing and you want to activate that item at another location the <code>stockAtLegacyLocation</code> parameter also needs to be set to true.</p>
<p>Learn more about <code>inventoryActivate</code> on <a href="https://shopify.dev/docs/api/admin-graphql/2024-10/mutations/inventoryActivate" target="_blank" class="body-link">Shopify.dev</a></p>
</div> ]]></description>
    <pubDate>Wed, 04 Sep 2024 17:21:00 +0000</pubDate>
    <atom:published>2024-09-04T17:21:00.000Z</atom:published>
    <atom:updated>2024-09-04T17:21:00.000Z</atom:updated>
    <category>API</category>
    <category>Update</category>
    <category>Admin GraphQL API</category>
    <category>2024-10</category>
    <link>https://shopify.dev/changelog/allow-item-activation-at-legacy-location</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/allow-item-activation-at-legacy-location</guid>
  </item>
  <item>
    <title>ReverseFulfillmentOrderLineItem.fulfillmentLineItem field is nullable as of 2024-10</title>
    <description><![CDATA[ <div class=""><p>As of <strong>2024-10</strong>,  <code>ReverseFulfillmentOrderLineItem.fulfillmentLineItem</code> field is nullable.  A <code>ReverseFulfillmentOrderLineItem</code> will not always be associated with a <code>FulfillmentLineItem</code> anymore. The non-null <code>fulfillmentLineItem</code> field on the older API versions will return a graphql error when the fulfillment line item does not exisit.</p>
<p>Learn more about <code>ReverseFulfillmentOrderLineItem</code> on <a href="https://shopify.dev/docs/api/admin-graphql/unstable/objects/ReverseFulfillmentOrderLineItem" target="_blank" class="body-link">Shopify.dev</a>.</p>
</div> ]]></description>
    <pubDate>Fri, 30 Aug 2024 17:55:00 +0000</pubDate>
    <atom:published>2024-08-30T17:55:00.000Z</atom:published>
    <atom:updated>2024-08-30T17:55:00.000Z</atom:updated>
    <category>Action Required</category>
    <category>API</category>
    <category>Deprecation announcement</category>
    <category>Admin GraphQL API</category>
    <category>2024-10</category>
    <link>https://shopify.dev/changelog/reversefulfillmentorderlineitem-fulfillmentlineitem-field-is-nullable-as-of-2024-10</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/reversefulfillmentorderlineitem-fulfillmentlineitem-field-is-nullable-as-of-2024-10</guid>
  </item>
  <item>
    <title>Admin API removes `lineItemsMutable` field on `Order`</title>
    <description><![CDATA[ <div class=""><p>As of Admin GraphQL API version <code>2024-10</code>, use <code>Order.lineItems</code> instead of <code>lineItemsMutable</code> field to get a list of the order's line items.</p>
<p>Learn more about <code>Order</code> on <a href="https://shopify.dev/docs/api/admin-graphql/2024-10/objects/Order#connection-lineitems" target="_blank" class="body-link">Shopify.dev</a>.</p>
</div> ]]></description>
    <pubDate>Tue, 27 Aug 2024 19:00:00 +0000</pubDate>
    <atom:published>2024-08-27T19:00:00.000Z</atom:published>
    <atom:updated>2024-08-27T19:45:57.000Z</atom:updated>
    <category>API</category>
    <category>Deprecation announcement</category>
    <category>Admin GraphQL API</category>
    <category>2024-10</category>
    <link>https://shopify.dev/changelog/admin-api-removes-lineitemsmutable-field-on-order</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/admin-api-removes-lineitemsmutable-field-on-order</guid>
  </item>
  <item>
    <title>Customer, Order, Company, and Model3d GraphQL types available in MetafieldReference union for 2024-01 and onward</title>
    <description><![CDATA[ <div class=""><p>We are retroactively adding Customer, Order, Company, and Model3d graphql types to the <a href="https://shopify.dev/docs/api/admin-graphql/latest/unions/MetafieldReference" target="_blank" class="body-link">MetafieldReference union</a> for Admin API from 2024-01 and onward.</p>
<p>Additionally, TaxonomyValue will be added in 2024-04 to align with the version the type was introduced.</p>
</div> ]]></description>
    <pubDate>Mon, 26 Aug 2024 21:30:00 +0000</pubDate>
    <atom:published>2024-08-26T21:30:00.000Z</atom:published>
    <atom:updated>2024-08-26T22:07:56.000Z</atom:updated>
    <category>API</category>
    <category>Update</category>
    <category>Admin GraphQL API</category>
    <category>2024-01</category>
    <link>https://shopify.dev/changelog/customer-order-company-and-model3d-graphql-types-available-in-metafieldreference-union-for-2024-01-and-onward</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/customer-order-company-and-model3d-graphql-types-available-in-metafieldreference-union-for-2024-01-and-onward</guid>
  </item>
  <item>
    <title>Protected customer data access required to use the Customer Account API</title>
    <description><![CDATA[ <div class=""><p>We are requiring apps to meet at least Level 1 Protected Customer Data Requirements in order to access the Customer Account GraphQL API. This change is applicable to all API versions. We recognize that this may be a breaking change for public apps that use the Customer Account API and is necessary to ensure the protection of customer data.</p>
<p>This change will not impact Hydrogen and Headless storefronts or Custom Apps since they already have access to Level 1 and Level 2 Protected Customer data.</p>
<p>Partners that are part of the Customer Account UI Extensibility developer preview and are calling the Customer Account API from their extensions will need to <a href="https://shopify.dev/docs/apps/launch/protected-customer-data#request-access-to-protected-customer-data" target="_blank" class="body-link">request access</a> to continue to access the API.</p>
<p>Learn more about Protected Customer Data on <a href="https://shopify.dev/docs/apps/store/data-protection/protected-customer-data" target="_blank" class="body-link">shopify.dev</a>.</p>
</div> ]]></description>
    <pubDate>Mon, 26 Aug 2024 21:00:00 +0000</pubDate>
    <atom:published>2024-08-26T21:00:00.000Z</atom:published>
    <atom:updated>2024-08-26T21:00:00.000Z</atom:updated>
    <category>Action Required</category>
    <category>API</category>
    <category>Update</category>
    <category>Customer Account API</category>
    <category>2024-01</category>
    <link>https://shopify.dev/changelog/protected-customer-data-access-required-to-use-the-customer-account-api</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/protected-customer-data-access-required-to-use-the-customer-account-api</guid>
  </item>
  <item>
    <title>Adding `productVariantsCount` GraphQL field.</title>
    <description><![CDATA[ <div class=""><p>As of <code>2024-10</code> version, we are adding <code>productVariantsCount</code> field to the Admin GraphQL API. </p>
<p>Learn more about <a href="https://shopify.dev/docs/api/admin-graphql/2024-10/queries/productVariantsCount" target="_blank" class="body-link">productVariantsCount</a> on <a href="https://shopify.dev/" target="_blank" class="body-link">Shopify.dev</a>.</p>
</div> ]]></description>
    <pubDate>Mon, 26 Aug 2024 04:00:00 +0000</pubDate>
    <atom:published>2024-08-26T04:00:00.000Z</atom:published>
    <atom:updated>2024-08-27T15:53:39.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <category>Admin GraphQL API</category>
    <category>2024-10</category>
    <link>https://shopify.dev/changelog/adding-productvariantscount-graphql-field</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/adding-productvariantscount-graphql-field</guid>
  </item>
  <item>
    <title>Built for Shopify Technical criteria checklist has been updated</title>
    <description><![CDATA[ <div class=""><p>The following changes have been made:</p>
<ul>
<li>Technical criteria checklist has been renamed to <code>Technical criteria</code></li>
<li>App distribution page layout has been updated, and the content for some standards have been re-worded for clarity.<ul>
<li>Added: A new section <code>Category-specific criteria</code> to outline criteria for specific app features. </li>
<li>Renamed: <code>Build for performance</code> is now <code>Performance</code>. </li>
<li>Renamed: <code>Usefulness criteria</code> is now <code>Merchant utility</code></li>
<li>Combined: <code>Protect app safety, security, and reliability</code> and <code>Design for ease of use</code> are now <code>Design and functionality</code></li>
<li>Removed:  <code>Share app info and benefits</code> along with the standard <code>Make sure your app listing content is up-to-date</code>. This standard was intended to encourage completion of new app listing form fields introduced in the past, which all partners now have completed.</li>
</ul>
</li>
</ul>
</div> ]]></description>
    <pubDate>Fri, 23 Aug 2024 16:29:00 +0000</pubDate>
    <atom:published>2024-08-23T16:29:00.000Z</atom:published>
    <atom:updated>2024-12-09T22:53:17.000Z</atom:updated>
    <category>Built for Shopify</category>
    <category>Update</category>
    <link>https://shopify.dev/changelog/built-for-shopify-technical-criteria-checklist-has-been-updated</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/built-for-shopify-technical-criteria-checklist-has-been-updated</guid>
  </item>
  <item>
    <title>Updates to Feature Filters, Theme Listing &amp; Partner Pages</title>
    <description><![CDATA[ <div class=""><ul>
<li>Merchants can now filter themes by 3 new features: &quot;Quick Order List&quot;, &quot;Sign in with Shop&quot; &amp; &quot;Swatch Filters&quot;. And we have removed 3 feature filters: &quot;Product reviews&quot;, &quot;Event Calendar&quot; &amp; &quot;Store Locator&quot;.</li>
<li>Each Theme's listing page has been updated to include quality signals and new styling.</li>
<li>The order of Theme cards on your Partner-specific &quot;All Theme Page&quot; has changed to be &quot;Newest to Oldest&quot;.</li>
</ul>
</div> ]]></description>
    <pubDate>Fri, 23 Aug 2024 15:49:00 +0000</pubDate>
    <atom:published>2024-08-23T15:49:00.000Z</atom:published>
    <atom:updated>2024-08-23T15:49:00.000Z</atom:updated>
    <category>Shopify Theme Store</category>
    <category>Update</category>
    <link>https://shopify.dev/changelog/updates-to-feature-filters-theme-listing-partner-pages</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/updates-to-feature-filters-theme-listing-partner-pages</guid>
  </item>
  <item>
    <title>Remove unused error codes from LocationDeactivateUserErrorCode</title>
    <description><![CDATA[ <div class=""><p>As of the <strong>2024-10</strong> release of the GraphQL Admin API, we're removing the error codes: <code>HAS_OPEN_TRANSFERS_ERROR</code> and <code>FAILED_TO_RELOCATE_OPEN_TRANSFERS</code> from <a href="https://shopify.dev/docs/api/admin-graphql/latest/enums/LocationDeactivateUserErrorCode" target="_blank" class="body-link">LocationDeactivateUserErrorCode</a>.</p>
<p>The error codes were not being returned from the <code>LocationDeactivate</code> mutation, as such, they will no longer be listed as possible error codes.</p>
<p>If you are explicitly checking either of these error codes, you should remove references to them. </p>
</div> ]]></description>
    <pubDate>Fri, 23 Aug 2024 13:01:00 +0000</pubDate>
    <atom:published>2024-08-23T13:01:00.000Z</atom:published>
    <atom:updated>2024-08-23T13:01:00.000Z</atom:updated>
    <category>API</category>
    <category>Deprecation announcement</category>
    <category>Admin GraphQL API</category>
    <category>2024-10</category>
    <link>https://shopify.dev/changelog/remove-unused-error-codes-from-locationdeactivateusererrorcode</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/remove-unused-error-codes-from-locationdeactivateusererrorcode</guid>
  </item>
  <item>
    <title>ShopifyPaymentsAccount GraphQL Admin API unused fields removed</title>
    <description><![CDATA[ <div class=""><p>As of GraphQL Admin API version 2024-10, we're cleaning up the <code>shopifyPaymentsAccount</code> endpoint and removing several unused fields.</p>
</div> ]]></description>
    <pubDate>Wed, 21 Aug 2024 16:00:00 +0000</pubDate>
    <atom:published>2024-08-21T16:00:00.000Z</atom:published>
    <atom:updated>2024-08-21T16:00:00.000Z</atom:updated>
    <category>API</category>
    <category>Deprecation announcement</category>
    <category>Admin GraphQL API</category>
    <category>2024-10</category>
    <link>https://shopify.dev/changelog/shopifypaymentsaccount-graphql-admin-api-unused-fields-removed</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/shopifypaymentsaccount-graphql-admin-api-unused-fields-removed</guid>
  </item>
  <item>
    <title>Shopify Functions log streaming and replay is now generally available</title>
    <description><![CDATA[ <div class=""><p>As of Shopify CLI 3.66, log streaming and replay for Shopify Functions is generally available.</p>
<p>Log streaming for Shopify Functions enables faster development, testing, and debugging of functions by bringing function execution logs to Shopify CLI. You can also replay function executions locally using input from these logs.</p>
<p>Learn more about Shopify Functions log streaming on <a href="https://shopify.dev/docs/apps/build/functions/test-debug-functions" target="_blank" class="body-link">Shopify.dev</a>.</p>
</div> ]]></description>
    <pubDate>Wed, 21 Aug 2024 14:00:00 +0000</pubDate>
    <atom:published>2024-08-21T14:00:00.000Z</atom:published>
    <atom:updated>2024-08-21T15:02:26.000Z</atom:updated>
    <category>Tools</category>
    <category>Update</category>
    <link>https://shopify.dev/changelog/shopify-functions-log-streaming-and-replay-is-now-generally-available</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/shopify-functions-log-streaming-and-replay-is-now-generally-available</guid>
  </item>
  <item>
    <title>Breaking changes to media in GraphQL API's ProductSet mutation in version 2024-10</title>
    <description><![CDATA[ <div class=""><p>As of GraphQL API version <code>2024-10</code>, we are expanding media capabilities in the productSet mutation:</p>
<ul>
<li><p>We are adding a new field type <strong><code>FileSetInput</code></strong>, which is a derivative of the <a href="https://shopify.dev/docs/api/admin-graphql/2024-10/input-objects/FileCreateInput" target="_blank" class="body-link">FileCreateInput</a>, with an added <code>id</code> field, which results in being able to both work with already existing media and create new files while using the same type.</p>
</li>
<li><p><a href="https://shopify.dev/docs/api/admin-graphql/2024-07/input-objects/ProductSetInput#field-mediaids" target="_blank" class="body-link"><code>ProductSet.mediaIds</code></a> field is being removed and replaced with the new <code>**files**</code> field, which expands the former's functionality by allowing you to also create new files to be associated with the product specified. This field utilizes the new <code>FileSetInput</code> type.</p>
</li>
<li><p><a href="https://shopify.dev/docs/api/admin-graphql/2024-07/input-objects/ProductVariantSetInput#field-mediaid" target="_blank" class="body-link"><code>ProductSetVariantInput.mediaId</code></a> is being removed and replaced with <code>**file**</code> field, which will associate the file with the variant. This field utilizes the new <code>FileSetInput</code> type.</p>
</li>
</ul>
<p>For more detailed information and examples, visit our <a href="https://shopify.dev/docs/api/admin-graphql/2024-10/mutations/productSet" target="_blank" class="body-link">productSet documentation</a> on Shopify.dev.</p>
</div> ]]></description>
    <pubDate>Tue, 20 Aug 2024 04:00:00 +0000</pubDate>
    <atom:published>2024-08-20T04:00:00.000Z</atom:published>
    <atom:updated>2024-08-20T04:00:00.000Z</atom:updated>
    <category>Action Required</category>
    <category>API</category>
    <category>Update</category>
    <category>Admin GraphQL API</category>
    <category>2024-10</category>
    <link>https://shopify.dev/changelog/breaking-changes-to-media-in-graphql-api-s-productset-mutation-in-version-2024-10</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/breaking-changes-to-media-in-graphql-api-s-productset-mutation-in-version-2024-10</guid>
  </item>
  <item>
    <title>Metafields and metaobjects reserved prefixes now supported in theme app extensions</title>
    <description><![CDATA[ <div class=""><p>When accessing metafield namespaces or metaobject types, you no longer need to hard code <code>app--{app_id}</code>. The <code>$app</code> reserved prefix is now available to use in your Liquid files.</p>
<p>Learn more about using reserved prefixes in theme app extensions on <a href="https://shopify.dev/docs/apps/build/online-store/theme-app-extensions/configuration#reserved-prefixes-for-metafields-and-metaobjects" target="_blank" class="body-link">Shopify.dev developer docs</a>.</p>
</div> ]]></description>
    <pubDate>Mon, 19 Aug 2024 16:41:00 +0000</pubDate>
    <atom:published>2024-08-19T16:41:00.000Z</atom:published>
    <atom:updated>2024-08-19T16:48:41.000Z</atom:updated>
    <category>Platform</category>
    <category>Update</category>
    <link>https://shopify.dev/changelog/metafields-and-metaobjects-reserved-prefixes-now-supported-in-theme-app-extensions</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/metafields-and-metaobjects-reserved-prefixes-now-supported-in-theme-app-extensions</guid>
  </item>
  <item>
    <title>Developer Preview: Accelerated Checkout Buttons on storefront now support Shopify Functions, Bundles, and have improved performance</title>
    <description><![CDATA[ <div class=""><p>We have improved the design and function of Dynamic Checkout and Accelerated Checkout buttons on storefront pages. These updates ensure that the buttons now support features like Shopify Functions and Product Bundles, providing better performance and a smoother user experience. These changes are now live on development stores and will begin rolling out to all merchants <strong>September 15</strong>.</p>
<p>Please note that the Accelerated Checkout buttons now hide their HTML in a custom element with a closed <a href="https://developer.mozilla.org/en-US/docs/Web/API/Web_components/Using_shadow_DOM" target="_blank" class="body-link">shadow DOM</a>. This means that any styling or event tracking that targets the existing HTML structure of these buttons will break.</p>
<p>Please review <a href="https://shopify.dev/docs/storefronts/themes/pricing-payments/accelerated-checkout/upgrade-accelerated-checkout" target="_blank" class="body-link">this guide</a>  and the <a href="https://shopify.dev/docs/storefronts/themes/pricing-payments/accelerated-checkout" target="_blank" class="body-link">Accelerated checkout button reference</a> to ensure your customizations remain compatible with the latest updates.</p>
</div> ]]></description>
    <pubDate>Fri, 16 Aug 2024 14:00:00 +0000</pubDate>
    <atom:published>2024-08-16T14:00:00.000Z</atom:published>
    <atom:updated>2024-08-21T14:07:28.000Z</atom:updated>
    <category>Action Required</category>
    <category>Themes</category>
    <category>Update</category>
    <link>https://shopify.dev/changelog/developer-preview-accelerated-checkout-buttons-on-storefront-now-support-shopify-functions-bundles-and-have-improved-performance</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/developer-preview-accelerated-checkout-buttons-on-storefront-now-support-shopify-functions-bundles-and-have-improved-performance</guid>
  </item>
  <item>
    <title>Storefront API changes when Cart ID is missing the key param</title>
    <description><![CDATA[ <div class=""><p>We are modifying how cart queries and mutations behave when the <a href="https://shopify.dev/docs/storefronts/headless/building-with-the-storefront-api/cart/manage#cart-id" target="_blank" class="body-link">Storefront API Cart ID</a> is missing the key param. This behavior is applied retroactively to all versions of the Storefront API. </p>
<p>An example cart ID: gid://shopify/Cart/c1-7a2abe82733a34e84aa472d57fb5c3c1?<strong>key=824bdj25mhg1242bdb385</strong></p>
<ul>
<li><p><strong>Queries:</strong> Querying a cart without including the key param will result in a cart with the buyer's private details removed.</p>
</li>
<li><p><strong>Mutations</strong> Updating a cart without including the key param will result in an error : <code>The specified cart does not exist</code>.</p>
</li>
</ul>
</div> ]]></description>
    <pubDate>Thu, 15 Aug 2024 15:00:00 +0000</pubDate>
    <atom:published>2024-08-15T15:00:00.000Z</atom:published>
    <atom:updated>2024-08-15T21:18:01.000Z</atom:updated>
    <category>API</category>
    <category>Update</category>
    <category>Storefront API</category>
    <link>https://shopify.dev/changelog/storefront-api-changes-when-cart-id-is-missing-the-key-param</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/storefront-api-changes-when-cart-id-is-missing-the-key-param</guid>
  </item>
  <item>
    <title>Deprecation Notice: `ProductChangeStatus` in Admin GraphQL API</title>
    <description><![CDATA[ <div class=""><p>We are deprecating <a href="https://shopify.dev/docs/api/admin-graphql/2024-10/mutations/productChangeStatus" target="_blank" class="body-link">productChangeStatus</a> mutation. Use <a href="https://shopify.dev/docs/api/admin-graphql/2024-10/mutations/productUpdate" target="_blank" class="body-link">productUpdate</a> mutation instead.</p>
<p>You will need to migrate to the new endpoint by January 2025 when we will remove access to the <code>productChangeStatus</code> mutation.</p>
<p>Learn more about product mutations at <a href="https://shopify.dev/" target="_blank" class="body-link">shopify.dev</a></p>
</div> ]]></description>
    <pubDate>Thu, 15 Aug 2024 04:00:00 +0000</pubDate>
    <atom:published>2024-08-15T04:00:00.000Z</atom:published>
    <atom:updated>2024-12-13T22:24:41.000Z</atom:updated>
    <category>Action Required</category>
    <category>API</category>
    <category>Deprecation announcement</category>
    <category>Admin GraphQL API</category>
    <category>2024-10</category>
    <link>https://shopify.dev/changelog/deprecation-notice-productchangestatus-in-admin-graphql-api</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/deprecation-notice-productchangestatus-in-admin-graphql-api</guid>
  </item>
  <item>
    <title>Theme cards being updated</title>
    <description><![CDATA[ <div class=""><p>Theme cards on the Theme Store have been updated. Theme cards are now:</p>
<ol>
<li>Visually simpler (feature tags have been removed)</li>
<li>Have a link to the listing for the Theme title </li>
<li>Have a badge to identify Themes that are new to the Theme Store</li>
<li>Show a Themes percentage positive reviews, and the number of reviews it's received</li>
</ol>
<p>No action is needed from Theme developers.</p>
</div> ]]></description>
    <pubDate>Wed, 14 Aug 2024 20:54:00 +0000</pubDate>
    <atom:published>2024-08-14T20:54:00.000Z</atom:published>
    <atom:updated>2024-08-21T16:46:14.000Z</atom:updated>
    <category>Shopify Theme Store</category>
    <category>Update</category>
    <link>https://shopify.dev/changelog/theme-cards-being-updated</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/theme-cards-being-updated</guid>
  </item>
  <item>
    <title>Updating *new* Theme promotion period</title>
    <description><![CDATA[ <div class=""><p>We are extending the promotion period for new Themes. Now, new Themes will be highlighted for a longer period than before. </p>
</div> ]]></description>
    <pubDate>Wed, 14 Aug 2024 17:45:00 +0000</pubDate>
    <atom:published>2024-08-14T17:45:00.000Z</atom:published>
    <atom:updated>2024-08-21T16:45:55.000Z</atom:updated>
    <category>Shopify Theme Store</category>
    <category>Update</category>
    <link>https://shopify.dev/changelog/updating-new-theme-promotion-period</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/updating-new-theme-promotion-period</guid>
  </item>
  <item>
    <title>Link metafield type now supported in metafield Liquid filters</title>
    <description><![CDATA[ <div class=""><p>We've added support for the <code>Link</code> metafield type to the <code>metafield_tag</code> filter in Liquid.</p>
<p>Furthermore, you can now consume <code>Link</code> metafields using dynamic sources in <code>inline_richtext</code> and <code>richtext</code> theme settings. <code>Link</code> metafields will be inserted with the <code>metafield_tag</code> filter by default for these setting types.</p>
<p>Learn more about metafield filters in <a href="https://shopify.dev/docs/api/liquid/filters/metafield-filters" target="_blank" class="body-link">Shopify.dev</a></p>
</div> ]]></description>
    <pubDate>Tue, 13 Aug 2024 17:12:00 +0000</pubDate>
    <atom:published>2024-08-13T17:12:00.000Z</atom:published>
    <atom:updated>2024-08-13T17:12:00.000Z</atom:updated>
    <category>Themes</category>
    <category>New</category>
    <category>Liquid</category>
    <link>https://shopify.dev/changelog/link-metafield-type-now-supported-in-metafield-liquid-filters</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/link-metafield-type-now-supported-in-metafield-liquid-filters</guid>
  </item>
  <item>
    <title>Error messages available in the Shopify Pixel Helper</title>
    <description><![CDATA[ <div class=""><p>We've added error messages to the Shopify Pixel Helper so that you can more easily debug your custom pixels. The Pixel Helper will display uncaught errors that occur at the top level or in the callback function. Top level errors will be viewable when the Pixel Helper loads. Callback error messages will be viewable when an event with a red dot is expanded.</p>
</div> ]]></description>
    <pubDate>Tue, 13 Aug 2024 16:14:00 +0000</pubDate>
    <atom:published>2024-08-13T16:14:00.000Z</atom:published>
    <atom:updated>2024-08-13T17:19:32.000Z</atom:updated>
    <category>Tools</category>
    <category>Update</category>
    <link>https://shopify.dev/changelog/error-messages-available-in-the-shopify-pixel-helper</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/error-messages-available-in-the-shopify-pixel-helper</guid>
  </item>
  <item>
    <title>Removing MetafieldStorefrontVisibility-related fields and mutations from Admin GraphQL API</title>
    <description><![CDATA[ <div class=""><p>As of the GraphQL Admin API version 2024-10, we're removing a number of <code>MetafieldStorefrontVisibility</code>-related fields, queries, and mutations.</p>
<p>Use the more flexible <code>MetafieldDefinition.access</code> field instead.</p>
<ul>
<li>We're removing <code>MetafieldDefinition.visibleToStorefrontApi</code>.<ul>
<li>Use <code>MetafieldDefinition.access</code> instead.</li>
</ul>
</li>
<li>We're removing <code>MetafieldDefinitionInput.visibleToStorefrontApi</code>.<ul>
<li>Use <code>MetafieldDefinitionInput.access</code> instead.</li>
</ul>
</li>
<li>We're removing <code>MetafieldDefinitionUpdateInput.visibleToStorefrontApi</code>.<ul>
<li>Use <code>MetafieldDefinitionUpdateInput.access</code> instead.</li>
</ul>
</li>
<li>We're removing <code>metafieldStorefrontVisibilityCreate</code><ul>
<li>Use <code>MetafieldDefinitionUpdate</code> instead.</li>
</ul>
</li>
<li>We're removing <code>metafieldStorefrontVisibilityDelete</code><ul>
<li>Use <code>MetafieldDefinitionUpdate</code> instead.</li>
</ul>
</li>
<li>We're removing <code>metafieldStorefrontVisibilities</code><ul>
<li>Use <code>MetafieldDefinition.access</code> instead.</li>
</ul>
</li>
<li>We're removing <code>metafieldStorefrontVisibility</code><ul>
<li>Use <code>MetafieldDefinition.access</code> instead.</li>
</ul>
</li>
</ul>
<p>Learn more about <code>MetafieldDefinition.access</code> at <a href="https://shopify.dev/docs/api/admin-graphql/2024-07/objects/MetafieldAccess" target="_blank" class="body-link">https://shopify.dev/docs/api/admin-graphql/2024-07/objects/MetafieldAccess</a></p>
</div> ]]></description>
    <pubDate>Mon, 12 Aug 2024 22:58:00 +0000</pubDate>
    <atom:published>2024-08-12T22:58:00.000Z</atom:published>
    <atom:updated>2024-08-12T23:41:48.000Z</atom:updated>
    <category>Action Required</category>
    <category>API</category>
    <category>Deprecation announcement</category>
    <category>Admin GraphQL API</category>
    <category>2024-10</category>
    <link>https://shopify.dev/changelog/removing-metafieldstorefrontvisibility-related-fields-and-mutations-from-admin-graphql-api</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/removing-metafieldstorefrontvisibility-related-fields-and-mutations-from-admin-graphql-api</guid>
  </item>
  <item>
    <title>Hydrogen August 2024 release</title>
    <description><![CDATA[ <div class=""><p><a href="https://github.com/Shopify/hydrogen/releases/tag/%40shopify%2Fhydrogen%402024.7.3" target="_blank" class="body-link">Hydrogen v2024.7.3</a> is out today. The August 2024 Hydrogen release contains several quality-of-life improvements, optimizations and bug fixes:</p>
<ul>
<li>Custom <code>.env</code> file support (<a href="https://github.com/Shopify/hydrogen/pull/2392" target="_blank" class="body-link">#2392</a>)</li>
<li>Improved performance of currency formatting (<a href="https://github.com/Shopify/hydrogen/pull/2372" target="_blank" class="body-link">#2372</a>)</li>
<li>Improved handling of <code>remix.config.js</code> / <code>vite.config.js</code> files (<a href="https://github.com/Shopify/hydrogen/pull/2379" target="_blank" class="body-link">#2379</a>)</li>
<li>Simplified context creation with a new <code>createHydrogenContext</code> function (<a href="https://github.com/Shopify/hydrogen/pull/2333" target="_blank" class="body-link">#2333</a>)</li>
<li>Script component now takes a <code>waitForHydration</code> prop (<a href="https://github.com/Shopify/hydrogen/pull/2389" target="_blank" class="body-link">#2389</a>)</li>
<li>Google web cache fix (<a href="https://github.com/Shopify/hydrogen/pull/2334" target="_blank" class="body-link">#2334</a>)</li>
<li>Custom logger support for <code>vite.config.js</code>. (<a href="https://github.com/Shopify/hydrogen/pull/2341" target="_blank" class="body-link">#2341</a>)</li>
<li>Subrequest profiler virtual root fix (<a href="https://github.com/Shopify/hydrogen/pull/2344" target="_blank" class="body-link">#2344</a>)</li>
<li>CLI: Auth flow fix. (<a href="https://github.com/Shopify/hydrogen/pull/2331" target="_blank" class="body-link">#2331</a>) \</li>
</ul>
<p>Check out our full <a href="https://hydrogen.shopify.dev/update/august-2024" target="_blank" class="body-link">Hydrogen August 2024 release blog post</a> for more details. And please drop your comments, feedback, and suggestions in <a href="https://github.com/Shopify/hydrogen/discussions" target="_blank" class="body-link">GitHub Discussions</a>!</p>
</div> ]]></description>
    <pubDate>Fri, 09 Aug 2024 21:44:00 +0000</pubDate>
    <atom:published>2024-08-09T21:44:00.000Z</atom:published>
    <atom:updated>2024-08-12T13:03:07.000Z</atom:updated>
    <category>Platform</category>
    <category>Update</category>
    <link>https://shopify.dev/changelog/hydrogen-august-2024-release</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/hydrogen-august-2024-release</guid>
  </item>
  <item>
    <title>Added new `access` argument to `standardMetafieldDefinitionEnable` and `standardMetafieldDefinitionsEnable` GraphQL mutations</title>
    <description><![CDATA[ <div class=""><p>As of the GraphQL Admin API version 2024-10, an <code>access</code>  argument is being added to the <code>standardMetafieldDefinitionEnable</code> and <code>standardMetafieldDefinitionsEnable</code> GraphQL mutations.</p>
<p>As of the GraphQL Admin API version 2024-10, we're deprecating the <code>visibleToStorefrontApi</code> argument on the <code>standardMetafieldDefinitionEnable</code> and <code>standardMetafieldDefinitionsEnable</code> GraphQL mutations. Use the new  <code>access</code>  argument instead.</p>
<p>The new <code>access</code> argument allows developers to specify more granular access controls when enabling a standard metafield definition template.</p>
<p>Learn more about <code>standardMetafieldDefinitionEnable</code> and <code>standardMetafieldDefinitionsEnable</code> at <a href="https://shopify.dev/docs/api/admin-graphql/2024-10/mutations/standardMetafieldDefinitionEnable" target="_blank" class="body-link">https://shopify.dev/docs/api/admin-graphql/2024-10/mutations/standardMetafieldDefinitionEnable</a> and <a href="https://shopify.dev/docs/api/admin-graphql/unstable/mutations/standardMetafieldDefinitionsEnable" target="_blank" class="body-link">https://shopify.dev/docs/api/admin-graphql/unstable/mutations/standardMetafieldDefinitionsEnable</a>.</p>
</div> ]]></description>
    <pubDate>Fri, 09 Aug 2024 16:53:00 +0000</pubDate>
    <atom:published>2024-08-09T16:53:00.000Z</atom:published>
    <atom:updated>2024-08-09T17:30:22.000Z</atom:updated>
    <category>API</category>
    <category>Update</category>
    <category>Admin GraphQL API</category>
    <category>2024-10</category>
    <link>https://shopify.dev/changelog/added-new-access-argument-to-standardmetafielddefinitionenable-and-standardmetafielddefinitionsenable-graphql-mutations</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/added-new-access-argument-to-standardmetafielddefinitionenable-and-standardmetafielddefinitionsenable-graphql-mutations</guid>
  </item>
  <item>
    <title>Notice of important updates to our Partner Program Agreement &amp; API License and Terms of Use </title>
    <description><![CDATA[ <div class=""><p>**Updates to our Partner Program Agreement and API License and Terms of Use
**</p>
<p>EFFECTIVE AUGUST 9, 2024 <strong>ACTION REQUIRED</strong></p>
<p>We've made changes to our Partner Program Agreement and API License and Terms of Use. These updates include terms that are intended to support the growth of Shopify Partners and Merchants, while maintaining the security and integrity of products and services offered on our platform. </p>
<p>These changes come into effect as of today, August 9, 2024.</p>
<p>We encourage all developers on our platform to review and be familiar with the <a href="https://www.shopify.com/legal/api-terms?shpxid=823b80d5-C747-48F6-6CF0-832254EC6F4B" target="_blank" class="body-link">API License and Terms</a> and the <a href="https://www.shopify.ca/partners/terms?shpxid=823b80d5-C747-48F6-6CF0-832254EC6F4B" target="_blank" class="body-link">Partner Program Agreement</a>, so that you understand how to build, run, and grow your app and development business on our platform.</p>
<p>For more information and frequently asked questions, please visit the <a href="https://help.shopify.com/en/partners/ppa-api-faq?shpxid=823b80d5-C747-48F6-6CF0-832254EC6F4B" target="_blank" class="body-link">Shopify Help Center</a>.</p>
</div> ]]></description>
    <pubDate>Fri, 09 Aug 2024 16:03:00 +0000</pubDate>
    <atom:published>2024-08-09T16:03:00.000Z</atom:published>
    <atom:updated>2024-08-09T16:03:00.000Z</atom:updated>
    <category>Action Required</category>
    <category>Platform</category>
    <category>Update</category>
    <link>https://shopify.dev/changelog/notice-of-important-updates-to-our-partner-program-agreement-api-license-and-terms-of-use</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/notice-of-important-updates-to-our-partner-program-agreement-api-license-and-terms-of-use</guid>
  </item>
  <item>
    <title>Fulfillment Hold Release Access Update</title>
    <description><![CDATA[ <div class=""><p>As of the Admin API version 2024-10, apps will not be able to release fulfillment holds unless they have write access to it.</p>
<p>If your app has the <code>write_merchant_managed_fulfillment_orders</code> scope, you will be able to release holds on fulfillment orders assigned to a merchant managed location.</p>
<p>If your app has the <code>write_third_party_fulfillment_orders</code> scope, you will be able to release holds on fulfillment orders assigned to a third party location.</p>
<p>If your app has the <code>write_marketplace_fulfillment_orders</code> scope, you will be able to release holds on fulfillment orders which belong to one of your marketplace's orders.</p>
<h3>How will this change effect my app?</h3>
<p>This change will only effect apps which release fulfillment holds using the Admin API.</p>
<p>If your app does not currently have sufficient access scopes as defined above then you will need to request the correct access scopes before migrating to the 2024-10 API version.</p>
<p>When using the GraphQL API, if your app does not have sufficient access to release a hold, a user error with the code <a href="https://shopify.dev/docs/api/admin-graphql/2024-10/enums/FulfillmentOrderReleaseHoldUserErrorCode#value-fulfillmentordernotfound" target="_blank" class="body-link">INVALID_ACCESS</a> will be returned and the hold will not be released.</p>
<p>When using the REST API, if your app does not have sufficient access to release a hold, a <code>422</code> error code  will be returned and the hold will not be released.</p>
<p>See the <a href="https://shopify.dev/docs/api/admin-graphql/2024-10/mutations/fulfillmentOrderReleaseHold" target="_blank" class="body-link">fulfillmentOrderReleaseHold mutation</a> for more information on what scopes are required.</p>
<p>See the API access scopes section of <a href="https://shopify.dev/docs/api/admin-graphql/2024-10/objects/FulfillmentOrder" target="_blank" class="body-link">the FulfillmentOrder resource</a> for more information about these scopes.</p>
</div> ]]></description>
    <pubDate>Fri, 09 Aug 2024 13:00:00 +0000</pubDate>
    <atom:published>2024-08-09T13:00:00.000Z</atom:published>
    <atom:updated>2024-09-12T14:19:34.000Z</atom:updated>
    <category>Action Required</category>
    <category>API</category>
    <category>Update</category>
    <category>Admin GraphQL API</category>
    <category>Admin REST API</category>
    <category>2024-10</category>
    <link>https://shopify.dev/changelog/fulfillment-hold-release-access-update</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/fulfillment-hold-release-access-update</guid>
  </item>
  <item>
    <title>All categories now support structured app category details</title>
    <description><![CDATA[ <div class=""><p>You can now specify the category-related features your app offers. These structured app category details will appear on your App Store listing page and in the app comparison feature.</p>
<p>Fill out the app category details fields on your app listing pages so that merchants can more easily find and assess whether your app meets their needs. </p>
<p>For more information, please refer to our <a href="https://shopify.dev/docs/apps/launch/app-requirements-checklist#4-app-category-details" target="_blank" class="body-link">dev documentation</a>. </p>
</div> ]]></description>
    <pubDate>Wed, 07 Aug 2024 17:25:00 +0000</pubDate>
    <atom:published>2024-08-07T17:25:00.000Z</atom:published>
    <atom:updated>2024-08-07T17:25:00.000Z</atom:updated>
    <category>App store</category>
    <category>Update</category>
    <link>https://shopify.dev/changelog/all-categories-now-support-structured-app-category-details</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/all-categories-now-support-structured-app-category-details</guid>
  </item>
  <item>
    <title>Product category included in product webhooks</title>
    <description><![CDATA[ <div class=""><p>As of <code>2024-10</code> version, the product create and update webhook payload contains information about the product category on a product.</p>
<p>The <code>category</code> field exposes a trimmed version of fields that are available on the Product GraphQL <a href="https://shopify.dev/docs/api/admin-graphql/2024-10/objects/Product#field-category" target="_blank" class="body-link">response</a>.</p>
<p>To receive <code>category</code> in the webhook payload, specify version <code>2024-10</code> or newer as the webhook API version in your <a href="https://shopify.dev/docs/apps/build/webhooks/subscribe/use-newer-api-version#step-3-select-the-newer-api-version" target="_blank" class="body-link">App Partner Dashboard</a>.</p>
</div> ]]></description>
    <pubDate>Thu, 01 Aug 2024 12:00:00 +0000</pubDate>
    <atom:published>2024-08-01T12:00:00.000Z</atom:published>
    <atom:updated>2024-08-12T14:01:16.000Z</atom:updated>
    <category>API</category>
    <category>New</category>
    <category>Admin GraphQL API</category>
    <category>Admin REST API</category>
    <category>2024-10</category>
    <link>https://shopify.dev/changelog/product-category-included-in-product-webhooks</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/product-category-included-in-product-webhooks</guid>
  </item>
  <item>
    <title>Partner payout schedule update</title>
    <description><![CDATA[ <div class=""><p>Effective from July 29, 2024, a 30-day hold will be applied to your first payout. This change will only impact new partners who have not yet received their first payout. Learn more about <a href="https://help.shopify.com/en/partners/getting-started/getting-paid#payout-threshold-and-schedule" target="_blank" class="body-link">payout schedules</a>.</p>
</div> ]]></description>
    <pubDate>Mon, 29 Jul 2024 19:00:00 +0000</pubDate>
    <atom:published>2024-07-29T19:00:00.000Z</atom:published>
    <atom:updated>2024-07-29T19:00:00.000Z</atom:updated>
    <category>Platform</category>
    <category>Update</category>
    <link>https://shopify.dev/changelog/partner-payout-schedule-update</link>
    <guid isPermaLink="true">https://shopify.dev/changelog/partner-payout-schedule-update</guid>
  </item>
  </channel>
</rss>