Shopify API 2026-10 Changes
Shopify's 2026-10 API is stable. Breaking changes: address edits on unfulfilled orders now recalculate taxes, draft order PriceRule is gone, invalid metafield filters now error instead of being ignored, carrier services no longer auto-join the General profile, and FULFILLMENT_NOT_REQUIRED joins the status enum. ProductVariant.barcode gives way to barcodes. Additions include multi-tracking order imports, Shopify Payments fee details, and a new subscription calculation flow.
Status: Stable as of October 1, 2026. Supported until at least October 16, 2027, 15:00 UTC.
Source: 2026-10 release notes
Shopify flags these areas as the ones needing code updates: order taxes, draft order discounts, metafield filters, and customer account checkouts.
GraphQL Admin API — Action required
Inventory
- The
ITEM_NOT_STOCKED_AT_LOCATIONerror has been removed from:InventoryAdjustQuantitiesInventoryMoveQuantitiesInventorySetOnHandQuantities- the
InventorySetQuantitiesUserErrorCodeenum
- Fix: Delete any logic that handles this error. It will never be returned again.
Orders — tax recalculation
- If you change the shipping address on an unfulfilled order with
orderUpdate(or the REST order update endpoint), Shopify now recalculates taxes for the new destination. - Fix: After the update, re-query
taxLines,totalTaxSet, and the order totals. Then reconcile the balance to catch any payment or refund difference.
Draft order discounts
DraftOrderDiscountNotAppliedWarning.priceRulehas been removed.PriceRuleand its related types have been removed from the public schema.- Fix: In
draftOrderCalculate,draftOrderCreate, anddraftOrderUpdate, selectdiscountTitleanddiscountCodeinstead.
Fulfillment status
OrderDisplayFulfillmentStatuscan now returnFULFILLMENT_NOT_REQUIRED. Orders with zero fulfillable quantity used to returnUNFULFILLED; they now return this value.- Fix: If you map the enum exhaustively, add a case for the new value.
Metafield filters
- A query that filters on a metafield that isn't filterable now returns an error. Previously the filter was silently ignored.
- Fix: Check that each metafield definition you filter on supports filtering and the comparison operators you use.
- Note: Queries that filtered on a non-filterable metafield were silently returning unfiltered results before this change. Treat any errors this surfaces as existing bugs, not new ones.
Carrier services
- Creating a carrier service with
carrierServiceCreate(orPOST /carrier_services.json) now only registers the service. It no longer adds rates to the General shipping profile. - Fix: Configure carrier-calculated rates in a shipping profile, or they won't appear at checkout.
Product variant barcodes (deprecation)
ProductVariant.barcodeis deprecated. Use the newbarcodesconnection, which holds up to 20 typed barcodes.barcodenow returns only the first entry.- Fix: Update product identifier syncs (UPC, EAN, and similar) to read
barcodes.
GraphQL Admin API — Additions
| Area | Change |
|---|---|
| Orders | OrderCreateFulfillmentInput.trackingNumbers supports multi-package imports. If you send both trackingNumber and trackingNumbers, trackingNumber takes precedence. |
| Subscriptions | SubscriptionContractCalculation succeeds SubscriptionDraft and uses a stateless calculate → poll → commit flow. (Early access.) |
| Payments | New paymentInstrumentSendAddEmail mutation emails a customer a link to add a payment method. Requires write_customers. |
| Shopify Payments | New feeDetails query returns per-fee details. Requires read_billing. |
| Shopify Payments | ShopifyPaymentsTransactionType gains CURRENCY_CONVERSION. |
| Inventory | inventoryShipmentReceive accepts a CANCELED reason. New fields: InventoryShipment.totalCanceledQuantity and InventoryShipmentLineItem.canceledQuantity. Webhook payloads now include canceled quantities. |
| Markets | New marketRelationships query, plus Market.parentMarkets and Market.childMarkets. Requires read_markets. Poll marketRelationshipsStatus.version to detect changes. |
| Pricing | ProductVariantContextualPricing.auditTrail returns the ordered list of price adjustments applied to a contextual price. |
| Metafields | New Metafield.translatable (non-null). Use it instead of TranslatableResourceType.METAFIELD. |
| Returns | ExchangeLineItem gains productId, title, variantSku, and variantTitle. |
Customer Account API
- Action required:
Customer.lastIncompleteCheckouthas been removed, along with theCheckouttype subtree. There is no replacement. CustomerAddressInputandCustomerAddressgaincountryCode, usingCountryCodeenum values such asUS.territoryCodeis deprecated but still works. If both are set,countryCodewins.
Shopify Functions
Customer.createdAtis now available throughCart.buyerIdentity.customer. Guest buyers have no customer data, so still handle that case.CartDeliveryOptionexposesmetafield(namespace:, key:). Delivery Customization Functions can read this instead of parsing option titles or handles.
POS UI Extensions (Polaris)
- Action required:
session.currentSession.staffMemberIdhas been removed. - Fix: Read
session.staffMember.value?.idinstead, or subscribe to thesession.staffMembersignal.
ShopifyQL
- New app analytics capabilities:
- Model data with analytics-queryable metafields and the App Events API.
- Query it with the ShopifyQL API.
- Embed analytics web components.
- Add annotations and metric targets to charts.
Storefront API
@inContextaccepts an optionalchannelIdargument. It applies that sales channel's product availability and pricing to the query.
Highest risk for multi-channel integrations
- Tax recalculation on address change. Order financials can change without any error being raised.
barcode→barcodes. Variants with more than one barcode can sync incompletely without any error.FULFILLMENT_NOT_REQUIRED. Code that maps fulfillment status exhaustively can break on the new value.- Metafield filter errors. Queries that used to run (wrongly unfiltered) will now fail.
Unverified: An earlier search snippet of the same release notes page listed "tax payload IDs" as a required change. The current page doesn't include it, so it may have been dropped during the release candidate period. Confirm before relying on either version.
No comments yet — be the first.