All Articles
cfml graphql shopify

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_LOCATION error has been removed from:
    • InventoryAdjustQuantities
    • InventoryMoveQuantities
    • InventorySetOnHandQuantities
    • the InventorySetQuantitiesUserErrorCode enum
  • 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.priceRule has been removed.
  • PriceRule and its related types have been removed from the public schema.
  • Fix: In draftOrderCalculate, draftOrderCreate, and draftOrderUpdate, select discountTitle and discountCode instead.

Fulfillment status

  • OrderDisplayFulfillmentStatus can now return FULFILLMENT_NOT_REQUIRED. Orders with zero fulfillable quantity used to return UNFULFILLED; 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 (or POST /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.barcode is deprecated. Use the new barcodes connection, which holds up to 20 typed barcodes.
  • barcode now returns only the first entry.
  • Fix: Update product identifier syncs (UPC, EAN, and similar) to read barcodes.

GraphQL Admin API — Additions

AreaChange
OrdersOrderCreateFulfillmentInput.trackingNumbers supports multi-package imports. If you send both trackingNumber and trackingNumbers, trackingNumber takes precedence.
SubscriptionsSubscriptionContractCalculation succeeds SubscriptionDraft and uses a stateless calculate → poll → commit flow. (Early access.)
PaymentsNew paymentInstrumentSendAddEmail mutation emails a customer a link to add a payment method. Requires write_customers.
Shopify PaymentsNew feeDetails query returns per-fee details. Requires read_billing.
Shopify PaymentsShopifyPaymentsTransactionType gains CURRENCY_CONVERSION.
InventoryinventoryShipmentReceive accepts a CANCELED reason. New fields: InventoryShipment.totalCanceledQuantity and InventoryShipmentLineItem.canceledQuantity. Webhook payloads now include canceled quantities.
MarketsNew marketRelationships query, plus Market.parentMarkets and Market.childMarkets. Requires read_markets. Poll marketRelationshipsStatus.version to detect changes.
PricingProductVariantContextualPricing.auditTrail returns the ordered list of price adjustments applied to a contextual price.
MetafieldsNew Metafield.translatable (non-null). Use it instead of TranslatableResourceType.METAFIELD.
ReturnsExchangeLineItem gains productId, title, variantSku, and variantTitle.

Customer Account API

  • Action required: Customer.lastIncompleteCheckout has been removed, along with the Checkout type subtree. There is no replacement.
  • CustomerAddressInput and CustomerAddress gain countryCode, using CountryCode enum values such as US.
  • territoryCode is deprecated but still works. If both are set, countryCode wins.

Shopify Functions

  • Customer.createdAt is now available through Cart.buyerIdentity.customer. Guest buyers have no customer data, so still handle that case.
  • CartDeliveryOption exposes metafield(namespace:, key:). Delivery Customization Functions can read this instead of parsing option titles or handles.

POS UI Extensions (Polaris)

  • Action required: session.currentSession.staffMemberId has been removed.
  • Fix: Read session.staffMember.value?.id instead, or subscribe to the session.staffMember signal.

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

  • @inContext accepts an optional channelId argument. It applies that sales channel's product availability and pricing to the query.

Highest risk for multi-channel integrations

  1. Tax recalculation on address change. Order financials can change without any error being raised.
  2. barcode → barcodes. Variants with more than one barcode can sync incompletely without any error.
  3. FULFILLMENT_NOT_REQUIRED. Code that maps fulfillment status exhaustively can break on the new value.
  4. 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.