2026-07: Release notes
The 2026-07 release focuses on merchandising, returns, extension capabilities, customer account, POS, and Storefront API changes.
Several changes in this version require code updates, especially around inventory mutation safety, customers, metaobjects, and products and collections. Review and adjust affected integrations before adopting 2026-07.
2026-07 is the latest stable API version. It's available for production use until at least July 1, 2027 at 15:00 UTC:
Anchor to GraphQL Admin APIGraph QL Admin API
GraphQL Admin API updates include POS cash management, gift cards, shipping, inventory, markets, orders, merchandising, and customer data.
Anchor to AppsApps
Shopify Flow now accepts action payloads that differ from the deployed configuration.
Shopify Flow no longer rejects third-party action payloads solely because their fields differ from the currently deployed configuration. Workflows using older action versions continue executing, and your endpoint receives the request so it can handle missing, extra, or legacy fields.
Jul 7, 2026Anchor to CustomersCustomers
Customer updates add tax ID access and WhatsApp marketing consent management.
Apps with read_customers or read_taxes can query Customer.taxSettings.taxId in the GraphQL Admin API to read a customer tax ID, such as a VAT number. taxIdValidation remains unavailable without approved protected customer data access.
If you manage WhatsApp marketing consent, use customerWhatsAppMarketingConsentUpdate in the GraphQL Admin API or Customer Account API to update consent for a customer’s default phone number, and read it from CustomerPhoneNumber.whatsAppMarketingConsent.
Anchor to Discounts and marketingDiscounts and marketing
Discount and marketing updates change cumulative marketing engagement behavior and subscription discount defaults.
The isCumulative argument on the marketingEngagementCreate mutation is deprecated and now defaults to false. Update integrations to send non-cumulative marketing engagements as needed; existing cumulative activities can migrate at any time.
The default value of appliesOnSubscription is now true on DiscountCodeAppInput and DiscountAutomaticAppInput in the GraphQL Admin API. No action is required, and explicitly set values keep existing behavior.
Anchor to Gift cardsGift cards
Gift card updates add line item access and cash-out transaction resolution.
The GiftCard GraphQL object now includes a lineItem field, so apps can query the line item associated with a gift card directly from the gift card record.
GiftCardCashOutTransaction is now a variant of the GiftCardTransaction interface for gift card balances paid out through POS. Use __typename when querying giftCard.transactions to distinguish cash-out transactions from credits and debits.
Anchor to GraphQL typesGraph QL types
GraphQL Admin API types add identifiers: BusinessEntity.legalEntityId exposes a nullable stable legal entity ID, and PaymentMandateResource.id identifies mandate records returned from customer payment method mandates.
BusinessEntity in the GraphQL Admin API now includes nullable legalEntityId, a stable organization-level BigInt identifier for the same legal entity across shops, markets, and sales channels. It can be null when no stable Central Legal Entity ID exists.
PaymentMandateResource now includes an id field on mandate records returned by the CustomerPaymentMethod.mandates connection. The value matches the corresponding CustomerPaymentMethod.id, which identifies the payment method for a mandate scope such as SUBSCRIPTIONS.
Anchor to InventoryInventory
Inventory updates add direct metafield support, transfer webhook fields, clearer mutation documentation, a delete error, and a required migration away from inventorySetScheduledChanges.
The inventorySetScheduledChanges mutation is removed with no replacement. Review your app for any usage and remove it; consider inventoryAdjustQuantities for immediate inventory adjustments or other inventory tools.
Inventory transfers now support transfer-specific metafields using MetafieldOwnerType.TRANSFER. Pass metafields to inventoryTransferCreate, inventoryTransferCreateAsReadyToShip, and inventoryTransferEdit; inventoryTransferDuplicate also copies metafields from the source transfer.
Selected inventory transfer webhook payloads now include origin.id and destination.id location GIDs when both endpoints are locations, reducing extra transfer fetches. inventoryTransferSetItems and inventoryTransferRemoveItems now provide clearer docs and mutation error messages.
The inventoryTransferDelete mutation can now return INVALID_STATE in InventoryTransferDeleteUserErrorCode when deleting an inventory transfer is blocked by an in-progress related product import. Older API versions still provide context in the message field.
Anchor to MetaobjectsMetaobjects
Metaobjects add Storefront API access visibility, JSON-compatible field access, and a visibleToStorefrontApi migration.
StandardMetaobjectDefinitionTemplate now includes an access field that exposes the template’s access rules. Use it to check whether a template is configured for Storefront API access before planning integrations.
visibleToStorefrontApi is removed from MetaobjectFieldDefinition, MetaobjectFieldDefinitionCreateInput, MetaobjectFieldDefinitionUpdateInput, and StandardMetaobjectDefinitionFieldTemplate.
Metaobjects now support a values property for reading all fields as a JSON-compatible object and creating or updating with automatic serialization. When mutating with values, omitted fields are cleared; use field or fields for field details or patch-style updates.
Anchor to OrdersOrders
The GraphQL Admin API adds draft order deposits for Shopify Plus, order checkoutToken and cartToken, and line item pricing and weight fields.
DraftOrderLineItem.grams is being removed from the GraphQL Admin API; after the API version becomes unsupported, queries referencing it return an error. Replace grams with DraftOrderLineItem.weight, which returns both value and unit.
Apps can set deposits when creating or updating draft orders for Shopify Plus stores using DraftOrderInput.deposit in the GraphQL Admin API. The Customer Account API exposes read-only draft order deposit details, including amounts due now and later.
Order object now includes checkoutToken, which returns the token associated with the checkout used to create the order. This aligns GraphQL with the REST Admin API checkout_token field.
Order object now includes cartToken, which returns the token associated with the cart used to create the order. This matches the existing REST Admin API cart_token field.
LineItem in the GraphQL Admin API now includes priceAfterAllDiscountsBeforeTaxesSet, equivalent to REST Admin API current_subtotal_price_set. It returns line item totals in shop and presentment currencies after discounts, excluding taxes, refunded quantities, and removed quantities.
Query weight on the GraphQL Admin API LineItem type to retrieve a Weight object with value and unit, making line item weights available without converting from the REST Admin API grams field.
POS cash management resources expose drawer balances and cash count details.
Cash management resources in the GraphQL Admin API now expose more detail. CashDrawer.balance returns the current drawer balance as MoneyV2, and CashCountActivity.note and CashCountActivity.reasonCode add context for cash count activities.
Anchor to Products and collectionsProducts and collections
Products and collections updates include market-driven shipping, the new Collection model, market delivery settings, app-owned delivery profiles, channel markets, local-currency gift cards, variant-level publishing, subscription mutation actors, and collection sorting.
Market-driven shipping moves merchant-owned shipping configuration from the delivery profile API to the Markets API, while app delivery profiles continue using the delivery profile API. If your app reads, creates, or updates merchant shipping settings, update and test it in the feature preview.
Jul 1, 2026For shops using market-driven shipping, merchant-owned GraphQL Admin API delivery profile APIs such as deliveryProfiles and deliveryProfileUpdate might return stale data or no-op writes. Apps that read or manage merchant-owned shipping must migrate per the market-driven shipping upgrade guide.
Collections now use Collection.sources with typed CollectionSource objects instead of only Collection.ruleSet. This supports multiple sources, exclusions, sub-collections, and shareable app-owned sources. Migrate reads and writes from ruleSet and legacy input arguments to sources and collection inputs.
The GraphQL Admin API supports market-level shipping configuration through Market.delivery.shipping, marketCreate, and marketUpdate. Apps can create, update, remove, disable, or inherit flat-rate, value-based, weight-based, and carrier-calculated shipping options per market.
App-owned shipping delivery profiles now support coversAllItems on DeliveryProfile and DeliveryProfileInput, so authorized apps can apply profile rates to every shippable variant without explicit assignments.
Supports channel markets using MarketType.CHANNEL and MarketConditionType.CHANNEL. Apps can create and update markets with channel conditions, query Market.channels and Channel.markets, filter by type with markets(type: CHANNEL), and manage channel-specific availability, pricing, and currency.
The GraphQL Admin API now supports local-currency gift cards through giftCardProductSet, with create-time-only issuanceCurrency and crossCurrencyRedeemable settings on Product.giftCardSettings.
ProductVariant now implements Publishable, so publishablePublish and publishableUnpublish accept variant IDs for per-publication visibility.
Subscription mutations now accept an optional actor argument to identify whether customer, merchant, or partner initiated billing attempts, contract edits, and status updates across supported GraphQL Admin API subscription mutations.
CollectionSortOrder enum now includes the MOST_RELEVANT value for collection sorting options.
Anchor to Shipping and fulfillmentShipping and fulfillment
Shipping and fulfillment updates add label purchasing and fulfillment order shipping lines.
Use the new shippingLabelPurchase GraphQL Admin API mutation to buy Shopify Shipping labels asynchronously for eligible fulfillment orders. Poll the returned ShippingLabelPurchaseResult for PENDING_PURCHASE, PURCHASED, or PURCHASE_FAILED status and access labels on shippingLabels.
The FulfillmentOrderLineItem object now includes a shippingLine field, so apps can access the associated shipping line for a fulfillment order line item through the GraphQL Admin API.
Anchor to Shopify PaymentsShopify Payments
Shopify Payments requires gateway payment method identifiers for remote payment method creation.
The customerPaymentMethodRemoteCreate mutation requires gateway payment method identifiers for remote Stripe, Authorize.net, and Braintree inputs: paymentMethodId, customerPaymentProfileId, or paymentMethodToken. Include the appropriate identifier so remotely created payment methods can process payments.
Anchor to Customer Account APICustomer Account API
Customer Account API adds draft order discount details and deprecates discounted unit price.
Anchor to OrdersOrders
The DraftOrderLineItem.discountedUnitPrice field in the Customer Account API is deprecated. Update queries to use approximateDiscountedUnitPrice, which returns the discounted total divided by quantity as an approximate per-unit price reduction.
Draft orders in the Customer Account API now expose discount details through DraftOrder.discountApplications and per-line-item allocations through DraftOrderLineItem.discountAllocations, so you can query applied discounts and their impact on individual draft order line items.
Anchor to Flow extensionsFlow extensions
Flow extensions pick up redeployed runtime URLs without merchant reactivation.
Shopify Flow now resolves an action’s runtime_url on each execution, so redeployed URL changes automatically apply to existing workflows without merchant reactivation. During local development, shopify app dev also updates runtime_url in development shops using the action.
Anchor to FunctionsFunctions
Shopify Functions gains checkout access to Shop User metafields.
Partners using metafields on Shop User can now read those metafields during checkout with Shopify Functions, enabling access to buyer-specific data for customized checkout experiences.
Anchor to Partner APIPartner API
Partner API adds app subscription cancellation for public app owners.
Anchor to Cancelling subscriptionsCancelling subscriptions
Clients can use the new appSubscriptionCancel mutation to cancel app subscriptions for public apps they own, including immediate or deferred cancellation, prorated credit requests, and optionally skipping final usage charges. Requires View financials permission in the Partner Dashboard.
Anchor to PolarisPolaris
Polaris updates include App Home, order attribution, and POS extension capabilities.
Anchor to App HomeApp Home
Custom-distribution apps can now build Shopify-hosted App Home pages.
Custom-distribution apps can now build App Home as a Shopify-hosted Preact UI extension targeting admin.app.home.render, using Polaris web components and shopify.extension.toml. Use this for lightweight extension-only apps that fit the extension runtime constraints.
Anchor to CheckoutCheckout
Checkout updates add order attribution definitions and deprecate buyer journey interception.
useBuyerJourneyIntercept and the dependent block_progress capability in shopify.extension.toml are deprecated and scheduled for removal in a future version. Migrate rule enforcement to a cart and checkout validation Function, or discount code rejection to the discount Function API.
Sales channel apps with a channel_config extension can create and manage granular order attribution definitions using order_attribution_config, orderAttributionDefinitionUpsert, and orderAttributionDefinitions, pass definition handles through orderCreate or source_name, and read results with Order.attribution.
POS UI extensions add per-unit discount requirements, hardware printing, bundle discount allocations, and a background target.
Action required: update POS UI extensions that pass FixedAmount discounts to setLineItemDiscount or bulkSetLineItemDiscounts to send per-unit amounts. Shopify POS no longer converts total line-item fixed discounts to per-unit values; percentage discounts are unaffected.
POS UI extensions can use shopify.printing.getPrinters() to discover connected receipt printers and shopify.printing.print() to print HTML or images directly without a dialog. shopify.print is deprecated; plan to migrate when adopting this API.
POS UI extensions now expose component-level discount allocations for product bundles through components[].discountAllocations on cart line items, including line items read from shopify.cart.current.value.lineItems. Handle the property as absent or empty when a bundle component has no discount allocations.
POS extensions can use the new pos.app.ready.data target to run headless background logic for the full POS session. Use shopify.addEventListener() to subscribe to events such as transactioncomplete, cashtrackingsessionstart, and cashtrackingsessioncomplete.
Anchor to Storefront APIStorefront API
Storefront API updates include cart line identification and clearer discount allocation fields.
Anchor to CartCart
Cart updates add viewKey support and require discount allocation query changes.
Update cart discount queries: use cart.discountApplications, cart.lines[].discountAllocations(lineLevelOnly: false), and cart.deliveryGroups[].discountAllocations instead of deprecated cart.discountAllocations.
CartLine now exposes viewKey, returning the same value rendered by Liquid storefronts and accepted by cartLinesUpdate and cartLinesRemove. Use it to correlate returned cart lines without changing existing UUID-based id handling.
cartLinesUpdate and cartLinesRemove can now identify cart lines using view_key as an alternative to cart line id. Use viewKey on CartLineUpdateInput or viewKeys on cartLinesRemove, mutually exclusive with id or lineIds.
CartWarning includes a new warning code, PRODUCT_UNAVAILABLE_IN_BUYER_LOCATION, for cart lines containing products that can’t be purchased from the buyer’s location.