Skip to main content

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:


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

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

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

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

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

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

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

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

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

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

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

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

Anchor to Inventory mutation safetyInventory mutation safety

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

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

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

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

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

Dec 12, 2025

Anchor to Marketing engagementMarketing engagement

Marketing engagement mutations add conversion tracking fields.

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

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

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

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

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

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

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

Anchor to Products and collectionsProducts and collections

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

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

Jan 1, 2026

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

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

Anchor to Shipping and fulfillmentShipping and fulfillment

Fulfillment service callbacks are now optional.

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

Store credit account credits can now notify account owners.

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

The Shop object introduces shopAddress as a replacement for billingAddress.

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

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

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

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

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

Anchor to Customer Account APICustomer Account API

Customer Account API expands metafield reference access.

Metafield references now support media and metaobject access controls.

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

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

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

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

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 functions can now reject discount codes with custom messages.

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

Anchor to Payment customizationPayment customization

Payment customization functions now treat Venmo and PayPal separately.

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

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

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

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

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

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

Customer account extensions add payment method update intents.

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

POS UI extensions add localization support and camera access.

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

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

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

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

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

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

Was this page helpful?