2026-10: Release notes
The 2026-10 release focuses on order, metafield, customer account, tax, analytics, and Storefront API changes.
Several changes in this version require code updates, especially around order taxes, draft order discounts, metafield filters, and customer account checkouts. Review and adjust affected integrations before adopting 2026-10.
2026-10 is the latest stable API version. It's available for production use until at least October 1, 2027 at 15:00 UTC:
- 2026-10RCStableUnsupported
Learn more about API versioning
| Stable version | Release date | Accessible until | Status |
|---|---|---|---|
| 2026-10 | October 1, 2026 | October 16, 2027 15:00 UTC | Latest stable |
Anchor to GraphQL Admin APIGraph QL Admin API
GraphQL Admin API changes affect order imports, taxes, draft order discounts, metafield filters, and carrier services.
Anchor to CustomersCustomers
Customer integrations need updates for SMS marketing consent and segment query syntax.
Segment query language functions now use MATCHES and NOT MATCHES instead of = true and = false, and function parameters take their own operators. The 12_months_ago, 90_days_ago, 30_days_ago, and 7_days_ago named dates are deprecated in favor of date offsets such as -12m.
CustomerPhoneNumber now has an smsMarketingConsent field that uses the same structured consent model as WhatsApp. The flat SMS marketing consent fields on CustomerPhoneNumber are deprecated, so plan to migrate existing integrations to smsMarketingConsent.
Anchor to Discounts and marketingDiscounts and marketing
Discount integrations need to account for Rollouts.
Discount types now expose a read-only rollouts connection. Add the read_rollouts access scope and read Discount.rollouts, Rollout schedules, and effective traffic allocation alongside startsAt and endsAt, because a discount's native dates don't describe its availability when it's part of a rollout.
Anchor to InventoryInventory
Inventory quantity mutations remove an obsolete stocking error.
The obsolete ITEM_NOT_STOCKED_AT_LOCATION error is removed from InventoryAdjustQuantities, InventoryMoveQuantities, and InventorySetOnHandQuantities, and from the InventorySetQuantitiesUserErrorCode enum. Remove app logic that handles this specific error.
inventoryShipmentReceive now accepts a CANCELED reason for shipment units that won't arrive. InventoryShipment.totalCanceledQuantity and InventoryShipmentLineItem.canceledQuantity report canceled units, and inventory_shipments/receive_items webhook payloads include canceled quantities.
Anchor to OrdersOrders
Update order integrations for imports, tax recalculation, draft order discounts, subscription contract calculations, and fulfillment statuses.
Changing the shipping address on an unfulfilled order with orderUpdate or the REST Admin API order update endpoint now recalculates taxes for the new destination. After updating, query updated taxLines, totalTaxSet, totals, and compare balances to handle payment or refund differences.
The deprecated priceRule field is removed from DraftOrderDiscountNotAppliedWarning. The legacy PriceRule object and related types are also removed from the public schema. Update queries from draftOrderCalculate, draftOrderCreate, and draftOrderUpdate to select discountTitle and discountCode instead.
The SubscriptionContractCalculation API runs subscription contract edits through Shopify's checkout engine, supports Shopify Functions during calculation, and previews totals, delivery options, and warnings before you commit changes. Migrate from SubscriptionDraft, which remains available but won't support these capabilities.
OrderCreateFulfillmentInput now includes trackingNumbers, so orderCreate can attach multiple tracking numbers when importing orders with multi-package fulfillments. If both trackingNumber and trackingNumbers are provided, trackingNumber takes precedence.
The GraphQL Admin API adds SubscriptionContractCalculation as the successor to SubscriptionDraft for creating, updating, and editing subscription contracts. It replaces the multi-step draft workflow with a stateless calculate → poll → commit lifecycle through Shopify’s checkout engine.
Order.displayFulfillmentStatus and other fields typed as OrderDisplayFulfillmentStatus can now return FULFILLMENT_NOT_REQUIRED for orders with zero remaining fulfillable quantity, instead of UNFULFILLED. Handle the new enum value if you exhaustively map fulfillment statuses.
The new paymentInstrumentSendAddEmail mutation emails a customer a link to add a payment method to a specific subscription contract, order, or draft order, without requiring them to sign in. Apps need the write_customers access scope to call it.
Buyers can now request removal of unfulfilled line items. The GraphQL Admin API adds RequestedOrderEdit, requestedOrderEditCreate, requestedOrderEditResolve, requestedOrderEditDecline, and requestedOrderEditCalculate. The Customer Account API adds orderRequestEdit, and three requested_order_edit webhook topics report each request's lifecycle.
CalculatedReturnShippingFee.taxAmountSet returns the estimated tax on a return shipping fee from returnCalculate, and ReturnShippingFee.finalizedTaxAmountSet returns the tax charged when the return is processed. Use them to show and reconcile tax on return shipping fees.
orderCancel now returns a jobResult field of type OrderCancelJobResult with the cancellation status, any errors, and the affected order, so you can confirm that the asynchronous cancellation succeeded. The existing job field is unchanged.
POS device data adds a fiscal register identifier.
PointOfSaleDevice.fiscalDeviceIdentifier returns the Shopify-assigned fiscal register identifier for a POS device, such as Sweden's manufacturing number. It returns null for devices in countries that don't require cash register registration, so only in-person fiscal compliance apps need it.
Anchor to Products and collectionsProducts and collections
Products and collections changes affect exchange line item queries and metafield filters.
The GraphQL Admin API now returns an error when a query filters by a metafield that isn't valid for filtering, instead of silently ignoring the predicate. Update affected metafield filter queries before you upgrade. Check that definitions support filtering and comparison operators.
ProductVariant now has a barcodes connection for up to 20 typed barcodes, and ProductVariant.barcode is deprecated. Update integrations that sync product identifiers to read barcodes, because barcode returns only the first entry.
ExchangeLineItem now includes productId, title, variantSku, and variantTitle fields, so apps can access product and variant details directly when querying exchange line items.
Apps with the read_markets access scope can traverse a store's market hierarchy with the new marketRelationships query and the parentMarkets and childMarkets fields on Market. Poll marketRelationshipsStatus.version to detect when the asynchronously rebuilt relationships change.
ProductVariantContextualPricing.auditTrail returns the ordered price adjustments Shopify applied to a contextual variant price, each with a type, value, resulting price, and display label. An empty priceAdjustments list means no complete audit trail is available.
The Metafield object now has a non-null translatable field that reports whether a metafield's value can be translated. Read it instead of querying translatableResources with the deprecated TranslatableResourceType.METAFIELD value.
Anchor to RolloutsRollouts
Apps can discover Rollouts and react when they change.
The rollouts and rollout queries return Rollouts with their schedules, trafficAllocation, effectiveTrafficAllocation, and changes to discounts, catalogs, themes, and checkout and accounts configurations. Rollout webhooks report lifecycle, effective-allocation, and resource changes.
Anchor to Shipping and fulfillmentShipping and fulfillment
Carrier services no longer add rates to the General shipping profile by default.
Creating carrier services with carrierServiceCreate or POST /admin/api/{version}/carrier_services.json now registers only the service. It doesn't add rates to the General shipping profile. Configure carrier-calculated rates in a shipping profile for checkout visibility.
Anchor to Shopify PaymentsShopify Payments
Shopify Payments adds a currency conversion balance transaction type.
The ShopifyPaymentsTransactionType enum now includes CURRENCY_CONVERSION, so ShopifyPaymentsBalanceTransaction.type can identify currency conversions in a shop's Shopify Payments balance transactions.
Anchor to Store propertiesStore properties
Market return rules are available as structured data.
The returnPolicyProfile and returnPolicyProfiles queries return the structured return rules that markets reference, and marketCreate and marketUpdate can assign or remove a profile. Reading profiles requires read_legal_policies, and assigning them requires write_markets.
Anchor to Customer Account APICustomer Account API
Customer Account API removes deprecated incomplete checkout fields.
The deprecated Customer.lastIncompleteCheckout field is removed, along with the unreachable Checkout type subtree. Remove any queries for Customer.lastIncompleteCheckout or nested Checkout fields before upgrading; there is no Customer Account API replacement.
CustomerAddressInput and CustomerAddress now include countryCode, which takes two-letter codes such as US from the CountryCode enum. territoryCode is deprecated but keeps working, and countryCode takes precedence when an address input sets both.
Anchor to Events & webhooksEvents & webhooks
Events become generally available, and Orders and inventory shipment webhook payloads include new identifiers.
Next Gen Events, the successor to classic webhooks, are generally available. Configure subscriptions in shopify.app.toml with triggers, a GraphQL Admin API query, and a query_filter to receive only the changes your app needs, together with the data it needs.
Line items in Orders webhook payloads now include selling_plan_id, which identifies the selling plan applied to a subscription line item and is null for other line items, so apps no longer need a follow-up API call to look it up.
inventory_shipments webhook payloads, including inventory_shipments/create, inventory_shipments/receive_items, and inventory_shipments/update_tracking, now include an inventory_transfer_id field that identifies the related inventory transfer, if any.
Anchor to FunctionsFunctions
Shopify Functions adds access to customer creation dates.
The Customer object in Shopify Functions now exposes createdAt. Request createdAt from Cart.buyerIdentity.customer when Function logic needs the date and time a customer account was created. Continue handling guest buyers where customer data is unavailable.
Functions can now read metafields on delivery options: request metafield(namespace:, key:) on CartDeliveryOption in input queries. Delivery Customization Functions can read data that a delivery option generator or carrier service attached, instead of parsing option titles or handles.
Apps that create discount types with Shopify Functions can register shopify/Discount app intents with create and edit actions, so Sidekick can launch the app's discount flows through the admin.app.intent.link or admin.app.intent.render targets.
Anchor to PolarisPolaris
Polaris updates add metafield owner types for checkout and customer account UI extensions, and change POS UI extension session and cart behavior.
Anchor to Checkout and customer accountsCheckout and customer accounts
Checkout and customer account UI extensions can scope metafield declarations to a resource type.
Metafield declarations in [[extensions.metafields]] and [[extensions.targeting.metafields]] now accept an owner_type, such as PRODUCT or CUSTOMER, so Shopify fetches only the metafields your extension needs. Add owner_type to each declaration before you upgrade, because later API versions block deployments that omit it.
POS UI extensions remove a deprecated Session API field and reject unconfirmed cart writes, so extensions need updates.
The deprecated session.currentSession.staffMemberId field is removed from the POS UI extensions Session API. Read session.staffMember.value?.id instead, or subscribe to the session.staffMember signal to react when a different staff member pins in.
Cart API mutations, such as applyCartDiscount, bulkCartUpdate, and setCustomer, now reject when Shopify POS doesn't confirm that the cart changed, instead of resolving silently. Add rejection handling to every cart mutation call before you update your extension's api_version.
Anchor to ShopifyQLShopify QL
ShopifyQL adds app analytics capabilities for modeling, querying, embedding, and enriching analytics data.
Apps can now model Shopify Analytics data with analytics-queryable metafields and the App Events API, query it with the ShopifyQL API, embed analytics web components, and add annotations and metric targets to charts.
Jul 21, 2026ShopifyqlQueryResponse now includes a parseWarnings field that lists non-fatal issues, such as fields scheduled for deprecation, on queries that ran successfully. Check it alongside parseErrors to catch problems before they cause failures.
The shop_campaign_insights schema adds a shop_campaign_orders metric and country and country_code dimensions. The sales schema adds four Shop Campaign dimensions, such as shop_campaign_name and shop_campaign_handle, so you can break down sales by the campaign that drove them.
Anchor to Storefront APIStorefront API
Storefront API adds sales channel context for queries.
@inContext directive now accepts an optional channelId argument to apply a sales channel’s context across a query, including channel-specific product availability and pricing.