---
title: '2026-01: Release notes'
description: >-
  Covers safer mutations, bulk operation changes, tax handling, richer returns
  data, cart discount behavior, and POS updates.
source_url:
  html: 'https://shopify.dev/release-notes/2026-01'
  md: 'https://shopify.dev/release-notes/2026-01.md'
api_version: 2026-01
metadata:
  description: >-
    Covers safer mutations, bulk operation changes, tax handling, richer returns
    data, cart discount behavior, and POS updates.
---

# 2026-01: Release notes

The 2026-01 release focuses on safer mutations, merchandising, returns, extension capabilities, webhooks, POS, and Storefront API changes.

Several changes in this version require code updates, especially around bulk operations, tax handling, payment customizations, and cart discount behavior. Review and adjust affected integrations before adopting 2026-01.

2026-01 is stable and available for production use until at least January 1, 2027 at 15:00 UTC:

***

## Graph​QL Admin API

GraphQL Admin API updates include bulk operations, inventory safety, billing, payments, returns, metafields, and tax workflows.

### Bulk operations

Bulk operations add broader mutation support, larger uploads, concurrent runs, management queries, and grouping changes.

Action required:

Bulk operations now omit object grouping by default for `bulkOperationRunQuery`, improving speed and reliability. If your bulk queries require grouped output, set `groupObjects: true`; remove deprecated `groupObjects` from `bulkOperationRunMutation`.

[Oct 29, 2025](https://shopify.dev/changelog/bulk-operations-group-objects-default-changed-to-false)

Update:

Bulk operations now support all mutations, file uploads up to 100 MB, and up to five concurrent bulk operations per app per shop. Large imports and exports can complete faster.

[Dec 15, 2025](https://shopify.dev/changelog/faster-bulk-operations)

Update:

The GraphQL Admin API adds `bulkOperations` and `bulkOperation` queries to list, filter, sort, paginate, and retrieve bulk operations by ID. Existing workflows can continue using `currentBulkOperation`, but it is being deprecated.

[Oct 31, 2025](https://shopify.dev/changelog/new-queries-for-bulk-operations)

### Graph​QL types

GraphQL Admin API type changes remove a draft orders connection, add billing attempt throttling errors, and introduce ACH bank account support.

Action required:

The deprecated `Shop.draftOrders` connection is removed from the GraphQL Admin API. Update apps that retrieve multiple draft orders through `Shop.draftOrders` to use `QueryRoot.draftOrders` instead.

[Sep 26, 2025](https://shopify.dev/changelog/removal-of-deprecated-shopdraftorders-connection-in-admin-graphql-api)

Update:

Billing attempts can now be throttled based on internal trust metrics to prevent abuse. Throttled attempts return the new `throttled` error code on the `BillingAttemptUserErrorCode` enum.

[Jan 1, 2026](https://shopify.dev/changelog/subscription-billing-attempts-throttling)

Update:

ACH payment methods are now supported through Shopify Payments for B2B company locations, payment terms, and draft orders. The new `BankAccount` object is included in the `PaymentInstrument` and `CustomerPaymentInstrument` unions.

[Oct 24, 2025](https://shopify.dev/changelog/new-ach-support-for-deferred-payments)

### Inventory

Inventory updates deprecate direct variant lookup and make transfer endpoints more flexible.

Action required:

The `InventoryItem.variant` field is deprecated and scheduled for removal in a future API version. Update GraphQL queries to use the `InventoryItem.variants` connection and request `edges` and `nodes` for compatibility.

[Dec 2, 2025](https://shopify.dev/changelog/inventory-item-variant-field-deprecation)

Update:

`inventoryTransferCreateAsReadyToShip` can now create inventory transfers with either `originLocationId` or `destinationLocationId` omitted, supporting transfers with an unknown endpoint. At least one location input is still required for validation.

[Oct 27, 2025](https://shopify.dev/changelog/optional-location-inputs-for-inventory-transfers)

### Inventory mutation safety

Inventory mutations add optional compare-and-swap protection and idempotency for safer retries.

Action required:

Use `changeFromQuantity` on `InventoryQuantityInput` with `inventorySetQuantities` to control compare-and-swap checks: pass the expected starting quantity, or `null` to bypass checks. Migrate from deprecated `compareQuantity` and `ignoreCompareQuantity` before removal starts.

[Dec 12, 2025](https://shopify.dev/changelog/compare-and-swap-redesign-for-inventory-set-quantities)

Action required:

Update integrations to use `changeFromQuantity` for compare-and-swap protection on inventory mutations, including `inventorySetQuantities`, where older compare-and-swap fields are deprecated. Add the optional `idempotent` directive to inventory and refund mutations to make retried requests safe.

[Dec 12, 2025](https://shopify.dev/changelog/concurrency-protection-features)

Update:

Several refund and inventory mutations, including `refundCreate`, `inventoryAdjustQuantities`, and transfer, shipment, location, and quantity mutations, now support the optional `idempotent` directive to prevent duplicate operations when retrying failed requests.

[Dec 12, 2025](https://shopify.dev/changelog/adding-idempotency-for-inventory-adjustments-and-refund-mutations)

Update:

Inventory mutations `inventoryAdjustQuantities`, `inventoryMoveQuantities`, `inventorySetOnHandQuantities`, and `productVariantsBulkUpdate` now accept optional `changeFromQuantity` to compare current quantities before applying changes.

[Dec 12, 2025](https://shopify.dev/changelog/compare-and-swap-for-inventory-mutations-with-change-from-quantity)

### Marketing engagement

Marketing engagement mutations add conversion tracking fields.

Update:

`MarketingEngagementCreateInput` and `MarketingEngagement` now include `primaryConversions` and `allConversions` on the `MarketingEngagementCreate` mutation, so marketing platforms can share primary and comprehensive conversion events for richer Shopify marketing reports.

[Dec 19, 2025](https://shopify.dev/changelog/conversion-tracking-fields-added-to-marketing-engagement-create)

### Orders

Order updates add return payment associations, granular return reasons, billing attempt errors, refund timestamps, and public phone updates.

Update:

`Return` object now includes a `transactions` connection for associating payments and refunds with specific returns. It includes refunds and captured payments for POS returns and exchanges, and refunds for online returns and exchanges.

[Jan 1, 2026](https://shopify.dev/changelog/access-transactions-on-the-return-object)

Update:

Use the new `ReturnReasonDefinition` type and `returnReasonDefinitions` query to work with granular, category-specific return reasons. Return mutations now accept `returnReasonDefinitionId`, and `returnReason` is deprecated in favor of `returnReasonDefinition` for reading return data.

[Jan 1, 2026](https://shopify.dev/changelog/new-return-reason-definitions-api-for-better-return-insights)

Update:

Subscription billing attempts can now return the `INVALID_BILLING_ADDRESS` processing error when one or more billing address fields contain invalid data, including name, address, city, province, country, postal code, phone, or company fields.

[Jan 1, 2026](https://shopify.dev/changelog/subscription-billing-attempt-invalid-billing-address-error)

Update:

The `refundCreate` mutation now accepts an optional `processedAt` input field so apps can specify the exact time a refund was processed, including backdated offline refunds. If omitted, Shopify uses the current timestamp by default.

[Dec 16, 2025](https://shopify.dev/changelog/set-processed-at-in-refund-create)

Update:

The `phone` field is now public on `OrderInput` for the `orderUpdate` mutation, so apps can update an order’s customer phone number and overwrite the existing value, matching REST Admin API support.

[Nov 1, 2025](https://shopify.dev/changelog/order-update-phone-field-public)

### Products and collections

Products and collections updates add due-on-fulfillment payment terms, advanced metafield filtering, and bundle option fields.

Update:

The `SellingPlanRemainingBalanceChargeTrigger` enum now includes `ON_FULFILLMENT`, so pre-order remaining balance payments can be processed when the order is fulfilled.

[Jan 1, 2026](https://shopify.dev/changelog/due-on-fulfillment-payment-term-available-for-pre-orders)

Update:

You can now query `Company` and `CompanyLocation` resources by metafield value, and use greater-than, less-than, prefix matching, and boolean operators like `AND`, `OR`, and `NOT` for metafield queries on `Product`, `Order`, and `Metaobject` entries.

[Dec 10, 2025](https://shopify.dev/changelog/advanced-metafield-metaobject-querying)

Update:

The GraphQL Admin API adds `consolidatedOptions` to `ProductBundleCreateInput` and `ProductBundleUpdateInput`, so apps can define buyer-facing options that combine across bundle components. Fixed bundles can present a single selector to customers.

[Dec 10, 2025](https://shopify.dev/changelog/new-fields-to-combine-bundle-options)

### Shipping and fulfillment

Fulfillment service callbacks are now optional.

Update:

The `callbackUrl` argument is now optional for `fulfillmentServiceCreate` and `fulfillmentServiceUpdate`. Fulfillment services without a callback URL that enable `inventoryManagement` or `trackingSupport` must submit required inventory, tracking, and fulfillment information through the API.

[Oct 13, 2025](https://shopify.dev/changelog/fulfillment-service-callback-url-is-now-optional)

### Store credit

Store credit account credits can now notify account owners.

Update:

The `storeCreditAccountCredit` mutation now accepts an optional `notify` parameter to send a “store credit issued” email when set to `true`. If omitted, no email is sent; recipients depend on whether the owner is a `Customer` or `CompanyLocation`.

[Oct 23, 2025](https://shopify.dev/changelog/store-credit-notify-flag)

### Store properties

The `Shop` object introduces `shopAddress` as a replacement for `billingAddress`.

Action required:

Adds `Shop.shopAddress` with the same structure and values as `Shop.billingAddress`, which is now deprecated and scheduled for removal in a future version. Update `Shop` queries to replace `billingAddress` with `shopAddress`.

[Dec 22, 2025](https://shopify.dev/changelog/deprecation-of-shop-billingaddress-in-favor-of-shop-shopaddress)

### Webhooks

Tax summary mutations and webhooks add tax liability workflows, UTC timestamps, and multi-currency amounts.

Update:

Tax Partner apps can use the `taxSummaryCreate` mutation to request tax summary generation for a specific order or time range, and subscribe to `tax_summaries/create` for events affecting tax liability. Requires `write_taxes` and Tax Platform access.

[Nov 5, 2025](https://shopify.dev/changelog/taxsummariescreate-webhook-and-taxsummarycreate-mutation-now-available)

Action required:

The `created_at` field in the `tax_summaries/create` webhook for tax partners now returns `UTC` timestamps with a `Z` suffix and millisecond precision. Update your parsing logic to handle the new timestamp format.

[Nov 20, 2025](https://shopify.dev/changelog/tax-summary-webhook-created-at-field-now-returns-utc-timezone)

Update:

The `tax_summaries/create` webhook and Tax Partner app tax calculation requests now include `MoneyBag` fields with `shop_money` and `presentment_money` amounts for sale records and cart line costs on multi-currency shops.

[Nov 22, 2025](https://shopify.dev/changelog/tax-summary-webhook-and-calculation-requests-now-includes-shop-and-presentment-currency-amount)

***

## Customer Account API

Customer Account API expands metafield reference access.

### Metafields

Metafield references now support media and metaobject access controls.

Update:

`metafield.reference` and `metafield.references` are available in the Customer Account API for media and metaobject references. In the GraphQL Admin API, create, update, and query `CustomerAccess` on `MetaobjectAccess`, set to `READ` or `NONE`, for metaobject definitions.

[Jan 1, 2026](https://shopify.dev/changelog/metafield-references-added-to-customer-account-api)

***

## Events & webhooks

Webhooks update checkout and accounts configuration tracking and order link request notifications.

### Order

Action required:

The `checkout_and_accounts_configurations/update` webhook is removed on January 1, 2026. Apps still subscribed must unsubscribe before removal; use the GraphQL Admin API `checkoutProfiles` query and `typOspPagesActive` field to track **Thank you** and **Order status** page upgrades.

[Aug 12, 2025](https://shopify.dev/changelog/deprecation-of-checkoutandaccountsconfigurationsupdate-webhook)

Update:

Apps can subscribe to the `orders/link_requested` webhook topic to be notified when a customer requests a new order link from an expired **Order status** page. The webhook payload delivers the complete `Order` object.

[Jan 1, 2026](https://shopify.dev/changelog/introducing-the-orderslinkrequested-webhook-topic)

***

## Functions

Functions updates add discount code rejection support and change payment customization behavior, with action required for apps that depend on previous payment-method handling.

### Discount

Discount functions can now reject discount codes with custom messages.

Update:

The Discount Function API now supports discount code rejection, so apps can conditionally reject discount codes with a custom message. Use this to prevent double discounts, manage code combinations, or disqualify products from discounts.

[Dec 17, 2025](https://shopify.dev/changelog/discount-rejection-support-for-discount-functions)

### Payment customization

Payment customization functions now treat Venmo and PayPal separately.

Action required:

Payment customization functions now treat Venmo and PayPal as separate payment methods, so hiding PayPal’s `ACCELERATED_CHECKOUT` placement no longer hides Venmo. If you relied on that behavior, explicitly target `name === "Venmo"` and hide Venmo separately.

[Dec 15, 2025](https://shopify.dev/changelog/venmo-and-paypal-are-now-treated-as-separate-payment-methods)

***

## Polaris

Polaris updates include extension access, discount settings, customer account intents, POS localization, and device camera access.

### Access

Checkout and customer account UI extensions are now available by default in new eligible development shops.

Update:

Developer preview has ended for checkout and customer account UI extensions. New Shopify Plus development shops get checkout UI extensions by default, and new development shops on all plans get customer account UI extensions; existing shops are unchanged.

[Mar 13, 2026](https://shopify.dev/changelog/checkout-and-customer-account-ui-extensions-available-by-default-in-new-development-shops)

### Admin

Admin UI extensions for Discount Functions add discount method and class management.

Update:

Discount Function admin UI extensions can use the new `discounts` object in the Discount Function Settings API to access `discountClasses` and `discountMethod`, and call `updateDiscountClasses` to enable only the discount classes a function requires.

[Jan 28, 2026](https://shopify.dev/changelog/enhanced-discount-function-configuration-with-admin-ui-extensions)

### Customer account

Customer account extensions add payment method update intents.

Update:

Customer account UI extensions can use the new Intents API to let buyers replace the payment method on a subscription contract in context. Shopify’s native payment flow handles the update.

[Jan 26, 2026](https://shopify.dev/changelog/intents-api-for-customer-accounts)

### POS

POS UI extensions add localization support and camera access.

Update:

POS UI extensions now support localization for international merchants, staff, and customers, including locale files for translated text, `formatCurrency` and `formatNumber` for localized values, and pluralization using `Intl.PluralRules`.

[Jan 23, 2026](https://shopify.dev/changelog/localization-support-for-pos-ui-extensions)

Update:

POS UI extensions can use the new Camera API to access the device camera for ID scanning, product photo capture, and attaching images directly in Shopify POS.

[Jan 23, 2026](https://shopify.dev/changelog/pos-ui-extensions-camera-api)

***

## Storefront API

Storefront API updates add cart discount code requirements and gift card recipient validation errors.

### Cart

Cart updates affect discount code mutations and gift card recipient validation.

Action required:

Calls to the Storefront API `cartDiscountCodesUpdate` mutation must now include the `discountCodes` argument. Update any calls that omit `discountCodes`; those calls were previously accepted but did not modify the cart.

[Oct 30, 2025](https://shopify.dev/changelog/the-cartdiscountcodeupdate-mutation-now-requires-the-discountcodes-field)

Update:

Returns `GIFT_CARD_RECIPIENT_INVALID` in `userErrors` for `cartCreate` and `cartLinesAdd` when gift card recipient details are missing or invalid, instead of returning an empty cart with empty `userErrors`.

[Dec 19, 2025](https://shopify.dev/changelog/storefront-api-now-returns-errors-when-adding-a-gift-card-to-a-cart-with-missing-or-invalid-recipient-details)

***
