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:
Anchor to GraphQL Admin APIGraph QL Admin API
GraphQL Admin API updates include bulk operations, inventory safety, billing, payments, returns, metafields, and tax workflows.
Anchor to Bulk operationsBulk operations
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.
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, 2025The 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.
Anchor to GraphQL typesGraph QL types
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.
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.
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.
Anchor to InventoryInventory
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.
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.
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.
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.
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.
Inventory mutations inventoryAdjustQuantities, inventoryMoveQuantities, inventorySetOnHandQuantities, and productVariantsBulkUpdate now accept optional changeFromQuantity to compare current quantities before applying changes.
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.
Anchor to OrdersOrders
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.
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.
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.
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.
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.
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.
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.
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.
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.
Anchor to Store creditStore credit
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.
Anchor to Store propertiesStore properties
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.
Anchor to WebhooksWebhooks
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.
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.
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.
Anchor to Customer Account APICustomer Account API
Customer Account API expands metafield reference access.
Anchor to MetafieldsMetafields
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.
Anchor to Events & webhooksEvents & webhooks
Webhooks update checkout and accounts configuration tracking and order link request notifications.
Anchor to OrderOrder
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.
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.
Anchor to FunctionsFunctions
Functions updates add discount code rejection support and change payment customization behavior, with action required for apps that depend on previous payment-method handling.
Anchor to DiscountDiscount
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, 2025Anchor 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.
Anchor to PolarisPolaris
Polaris updates include extension access, discount settings, customer account intents, POS localization, and device camera access.
Anchor to AccessAccess
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, 2026Anchor to AdminAdmin
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.
Anchor to Customer accountCustomer account
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, 2026POS 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.
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, 2026Anchor to Storefront APIStorefront API
Storefront API updates add cart discount code requirements and gift card recipient validation errors.
Anchor to CartCart
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.
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.