---
title: '2026-07: Release notes'
description: >-
  Adds richer merchandising and returns data, expanded extension capabilities,
  inventory safety updates, and metaobject changes.
source_url:
  html: 'https://shopify.dev/release-notes/2026-07'
  md: 'https://shopify.dev/release-notes/2026-07.md'
api_version: 2026-07
metadata:
  description: >-
    Adds richer merchandising and returns data, expanded extension capabilities,
    inventory safety updates, and metaobject changes.
---

Latest

# 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:

***

## Graph​QL Admin API

GraphQL Admin API updates include POS cash management, gift cards, shipping, inventory, markets, orders, merchandising, and customer data.

### Apps

Shopify Flow now accepts action payloads that differ from the deployed configuration.

Update:

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, 2026](https://shopify.dev/changelog/shopify-flow-changes-to-action-extensions-result-in-fewer-breaking-changes)

### Customers

Customer updates add tax ID access and WhatsApp marketing consent management.

Update:

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.

[Apr 24, 2026](https://shopify.dev/changelog/customer-tax-settings-now-available-in-admin-api)

Action required:

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`.

[Jun 17, 2026](https://shopify.dev/changelog/whatsapp-marketing-consent-now-available)

### Discounts and marketing

Discount and marketing updates change cumulative marketing engagement behavior and subscription discount defaults.

Action required:

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.

[Jul 1, 2026](https://shopify.dev/changelog/deprecation-of-cumulative-marketing-engagements)

Update:

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.

[May 4, 2026](https://shopify.dev/changelog/default-value-of-appliesonsubscription-changed-to-true-for-app-discount-inputs)

### Gift cards

Gift card updates add line item access and cash-out transaction resolution.

Update:

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.

[Jul 1, 2026](https://shopify.dev/docs/api/admin-graphql/2026-07/objects/GiftCard?source=/changelog/new-lineitem-field-on-the-giftcard-graphql-object#field-GiftCard.fields.lineItem)

Update:

`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.

[Jun 5, 2026](https://shopify.dev/changelog/giftcardcashouttransaction-now-resolvable-from-giftcardtransaction)

### Graph​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.

Update:

`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.

[Jul 1, 2026](https://shopify.dev/changelog/businessentity-now-exposes-legalentityid-in-the-admin-api)

Update:

`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`.

[Jun 27, 2026](https://shopify.dev/changelog/payment-mandates-id-field)

### Inventory

Inventory updates add direct metafield support, transfer webhook fields, clearer mutation documentation, a delete error, and a required migration away from `inventorySetScheduledChanges`.

Action required:

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.

[Mar 9, 2026](https://shopify.dev/changelog/inventorysetscheduledchanges-mutation-is-being-removed-with-no-replacement)

Update:

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.

[Jun 17, 2026](https://shopify.dev/changelog/define-and-set-metafields-on-inventory-transfers-in-the-admin-graphql-api)

Update:

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.

[Jun 5, 2026](https://shopify.dev/changelog/inventory-transfer-webhooks-include-origin-and-destination-location-ids-and-mutation-documentation-clarified)

Update:

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.

[Mar 17, 2026](https://shopify.dev/changelog/inventorytransferdelete-adds-invalidstate-error-code-for-transfers-with-in-progress-product-import)

### Metaobjects

Metaobjects add Storefront API access visibility, JSON-compatible field access, and a `visibleToStorefrontApi` migration.

Update:

`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.

[Apr 1, 2026](https://shopify.dev/changelog/adding-access-field-to-standardmetaobjectdefinitiontemplate)

Action required:

`visibleToStorefrontApi` is removed from `MetaobjectFieldDefinition`, `MetaobjectFieldDefinitionCreateInput`, `MetaobjectFieldDefinitionUpdateInput`, and `StandardMetaobjectDefinitionFieldTemplate`.

[Mar 30, 2026](https://shopify.dev/changelog/removing-storefront-visibility-field-on-metaobject-field-definitions)

Update:

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.

[Jun 11, 2026](https://shopify.dev/changelog/streamlined-metaobject-api)

### Orders

The GraphQL Admin API adds draft order deposits for Shopify Plus, order `checkoutToken` and `cartToken`, and line item pricing and weight fields.

Action required:

`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`.

[Apr 13, 2026](https://shopify.dev/changelog/draftorderlineitemgrams-field-removed-in-2026-07)

Update:

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.

[Jul 1, 2026](https://shopify.dev/changelog/draft-order-deposit-fields-now-available-in-the-admin-and-customer-account-graphql-apis)

Update:

`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.

[May 15, 2026](https://shopify.dev/changelog/new-checkouttoken-field-added-to-the-order-object)

Update:

`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.

[May 12, 2026](https://shopify.dev/changelog/new-field-carttoken-added-to-the-order-graphql-admin-api)

Update:

`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.

[Apr 27, 2026](https://shopify.dev/changelog/lineitem-priceafteralldiscountsbeforetaxesset-field-now-available)

Update:

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.

[Apr 15, 2026](https://shopify.dev/changelog/lineitem-weight-field-now-available-in-public-admin-api)

### POS

POS cash management resources expose drawer balances and cash count details.

Update:

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.

[Jul 31, 2026](https://shopify.dev/changelog/new-fields-for-cash-management-activities-and-drawers)

### Products 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.

Action required:

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, 2026](https://shopify.dev/changelog/market-driven-shipping-now-available-in-feature-preview)

Action required:

For 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.

[Jul 1, 2026](https://shopify.dev/changelog/merchant-owned-delivery-profile-apis-are-deprecated-for-market-driven-shipping)

Action required:

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.

[Jun 17, 2026](https://shopify.dev/changelog/new-collection-model-and-apis-now-available)

Update:

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.

[Jul 1, 2026](https://shopify.dev/changelog/market-driven-delivery-profiles-admin-api)

Update:

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.

[Jun 17, 2026](https://shopify.dev/changelog/admin-graphql-api-now-supports-app-owned-delivery-profiles-that-cover-all-shippable-items)

Update:

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.

[Jun 17, 2026](https://shopify.dev/changelog/create-channel-markets-with-the-graphql-admin-api)

Update:

The GraphQL Admin API now supports local-currency gift cards through `giftCardProductSet`, with create-time-only `issuanceCurrency` and `crossCurrencyRedeemable` settings on `Product.giftCardSettings`.

[Jun 5, 2026](https://shopify.dev/changelog/gift-card-local-currency-support)

Update:

`ProductVariant` now implements `Publishable`, so `publishablePublish` and `publishableUnpublish` accept variant IDs for per-publication visibility.

[May 7, 2026](https://shopify.dev/changelog/publish-and-unpublish-product-variants-independently-from-product)

Update:

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.

[May 4, 2026](https://shopify.dev/changelog/add-actor-field-to-subscription-contract-and-billing-attempt-mutations)

Update:

`CollectionSortOrder` enum now includes the `MOST_RELEVANT` value for collection sorting options.

[Apr 15, 2026](https://shopify.dev/changelog/added-mostrelevant-value-for-collectionsortorder)

### Shipping and fulfillment

Shipping and fulfillment updates add label purchasing and fulfillment order shipping lines.

Update:

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`.

[Jun 17, 2026](https://shopify.dev/changelog/label-purchase-mutation)

Update:

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.

[May 18, 2026](https://shopify.dev/docs/api/admin-graphql/2026-07/objects/FulfillmentOrderLineItem?source=/changelog/shipping-line-field-now-available-on-fulfillmentorderlineitem#field-FulfillmentOrderLineItem.fields.shippingLine)

### Shopify Payments

Shopify Payments requires gateway payment method identifiers for remote payment method creation.

Update:

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.

[Apr 1, 2026](https://shopify.dev/changelog/payment-method-identifier-now-required-for-customerpaymentmethodremotecreate)

***

## Customer Account API

Customer Account API adds draft order discount details and deprecates discounted unit price.

### Orders

Action required:

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.

[Jul 1, 2026](https://shopify.dev/changelog/discountedunitprice-on-draftorderlineitem-customer-account-api-deprecation)

Update:

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.

[Jul 1, 2026](https://shopify.dev/changelog/discount-application-information-now-available-for-draft-orders-on-the-customer-account-api)

***

## Flow extensions

Flow extensions pick up redeployed runtime URLs without merchant reactivation.

Update:

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.

[Jul 7, 2026](https://shopify.dev/changelog/shopify-flow-action-runtime-urls-now-update-automatically)

***

## Functions

Shopify Functions gains checkout access to Shop User metafields.

Update:

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.

[Jun 13, 2026](https://shopify.dev/changelog/shop-user-metafields-in-shopify-functions)

***

## Partner API

Partner API adds app subscription cancellation for public app owners.

### Cancelling subscriptions

Update:

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.

[Jun 16, 2026](https://shopify.dev/changelog/new-appsubscriptioncancel-mutation-in-the-partner-api)

***

## Polaris

Polaris updates include App Home, order attribution, and POS extension capabilities.

### App Home

Custom-distribution apps can now build Shopify-hosted App Home pages.

Update:

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.

[Jun 1, 2026](https://shopify.dev/changelog/build-app-home-as-a-ui-extension)

### Checkout

Checkout updates add order attribution definitions and deprecate buyer journey interception.

Action required:

`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.

[Jul 2, 2026](https://shopify.dev/changelog/deprecating-the-usebuyerjourneyintercept-api-on-checkout-ui-extensions)

Update:

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`.

[Jun 30, 2026](https://shopify.dev/changelog/order-attribution-definitions-are-available-in-order-channel-filters)

### POS

POS UI extensions add per-unit discount requirements, hardware printing, bundle discount allocations, and a background target.

Action required:

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.

[Jul 8, 2026](https://shopify.dev/changelog/pos-ui-extensions-2026-07-uses-per-unit-fixed-amount-line-item-discounts)

Update:

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.

[Jul 27, 2026](https://shopify.dev/changelog/pos-ui-extensions-can-now-print-directly-to-hardware-receipt-printers)

Update:

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.

[Jul 15, 2026](https://shopify.dev/changelog/pos-ui-extensions-2026-07-adds-discount-allocations-to-bundle-components)

Update:

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`.

[Jul 9, 2026](https://shopify.dev/changelog/pos-extensions-now-supports-a-background-extension-target)

***

## Storefront API

Storefront API updates include cart line identification and clearer discount allocation fields.

### Cart

Cart updates add `viewKey` support and require discount allocation query changes.

Action required:

Update cart discount queries: use `cart.discountApplications`, `cart.lines[].discountAllocations(lineLevelOnly: false)`, and `cart.deliveryGroups[].discountAllocations` instead of deprecated `cart.discountAllocations`.

[Apr 10, 2026](https://shopify.dev/changelog/new-discount-fields-in-the-storefront-cart-graphql-api)

Update:

`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.

[Jun 12, 2026](https://shopify.dev/changelog/cart-line-view-key-field)

Update:

`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`.

[Jun 2, 2026](https://shopify.dev/changelog/cart-line-mutations-accept-view-key)

Update:

`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.

[May 12, 2026](https://shopify.dev/docs/api/storefront/2026-07/objects/CartWarning?source=/changelog/new-productunavailableinbuyerlocation-warning-code-in-the-storefront-api-cart#field-CartWarning.fields.code.PRODUCT_UNAVAILABLE_IN_BUYER_LOCATION)

***
