Order Edit Calculation API, Filter Update, Subscription Draft Deprecation

9/6/2026, 12:00:13 AM

Shopify GraphQL now exposes a requestedOrderEditCalculate query that returns the calculated financial outcome of a requested order edit, replacing the deprecated requestedEditCalculate. The orders and ordersCount queries have been updated: requested_edit_status has been renamed to requested_order_edit_status and added to the filter options. SubscriptionDraft functions and several subscriptionContract/SubscriptionDraft mutations are marked deprecated in favor of the SubscriptionContractCalculation API. New types—including BarcodeInput, BarcodeType, and calculation input objects—support barcodes on product variants and fine‑grained edit calculations. Developers should update queries to use requested_order_edit_status, migrate away from the legacy subscription draft flow, and adopt the new calculation and barcode types for their integrations.

Query Changes

➕ Added Queries (1)

requestedOrderEditCalculate

The calculated financial outcome of a requested order edit.

➖ Removed Queries (1)

requestedEditCalculate

The calculated financial outcome of a requested order edit.

🔄 Modified Queries (3)

orders

Returns a list of orders placed in the store, including data such as order status, customer, and line item details.
Use the orders query to build reports, analyze sales performance, or automate fulfillment workflows. The orders query supports pagination,
sorting, and filtering.

~ Modified argument: query
ordersCount

Returns the number of orders in the shop. You can filter orders using search syntax or a SavedSearch, and set a maximum count limit to control query performance.

Use the query argument to filter the count by criteria like order status, financial state, or fulfillment status. The response includes both the count value and its precision, indicating whether the count is exact or an estimate.

Note:
The count is limited to 10,000 orders by default. Use the limit argument to adjust this value, or pass null for no limit. Limited to a maximum of 10000 by default.

~ Modified argument: query
subscriptionDraft

Returns a Subscription Draft resource by ID.

⚠️ Deprecated: Use the [SubscriptionContractCalculation API](https://shopify.dev/docs/apps/build/purchase-options/subscriptions/contracts/migrate-to-subscription-calculation-api) instead.

Mutation Changes

➕ Added Mutations (3)

requestedOrderEditCreate

Creates a requested edit on an order on behalf of a buyer.

requestedOrderEditDecline

Declines a requested edit on an order.

requestedOrderEditResolve

Resolves a requested edit on an order, marking it as completed.

➖ Removed Mutations (3)

requestedEditCreate

Creates a requested edit on an order on behalf of a buyer.

requestedEditDecline

Declines a requested edit on an order.

requestedEditResolve

Resolves a requested edit on an order, marking it as completed.

🔄 Modified Mutations (13)

subscriptionContractCreate

Creates a subscription contract draft, which is an intention to create a new subscription. The draft lets you incrementally build and modify subscription details before committing them to create the actual SubscriptionContract.

The mutation requires Customer information, billing details, and contract configuration including the SubscriptionBillingPolicy and SubscriptionDeliveryPolicy. You can specify the CustomerPaymentMethod, the MailingAddress for shipping, and subscription intervals.

After you create the draft, you can either modify it with the subscriptionDraftUpdate mutation or finalize and create the active subscription contract with subscriptionDraftCommit.

This mutation and the draft-based flow are deprecated in favor of the SubscriptionContractCalculation API.

Learn more about building subscription contracts.

⚠️ Deprecated: Use [`subscriptionContractCreateCalculate`](https://shopify.dev/docs/api/admin-graphql/latest/mutations/subscriptionContractCreateCalculate) instead.
subscriptionContractUpdate

Creates a draft of an existing SubscriptionContract. The draft captures the current state of the contract and allows incremental modifications through draft mutations such as subscriptionDraftLineAdd, subscriptionDraftDiscountAdd, and subscriptionDraftUpdate.

Changes remain in draft state and don't affect the live contract until committed. After you've made all necessary changes to the draft, commit it using subscriptionDraftCommit to apply the updates to the original contract.

This mutation and the draft-based edit flow are deprecated in favor of the SubscriptionContractCalculation API.

Learn more about updating subscription contracts.

⚠️ Deprecated: Use [`subscriptionContractUpdateCalculate`](https://shopify.dev/docs/api/admin-graphql/latest/mutations/subscriptionContractUpdateCalculate) instead.
subscriptionDraftCommit

Commits the updates of a Subscription Contract draft.

⚠️ Deprecated: Use the [SubscriptionContractCalculation API](https://shopify.dev/docs/apps/build/purchase-options/subscriptions/contracts/migrate-to-subscription-calculation-api) instead.
subscriptionDraftDiscountAdd

Adds a subscription discount to a subscription draft.

⚠️ Deprecated: Use the [SubscriptionContractCalculation API](https://shopify.dev/docs/apps/build/purchase-options/subscriptions/contracts/migrate-to-subscription-calculation-api) instead.
subscriptionDraftDiscountCodeApply

Applies a code discount on the subscription draft.

⚠️ Deprecated: Use the [SubscriptionContractCalculation API](https://shopify.dev/docs/apps/build/purchase-options/subscriptions/contracts/migrate-to-subscription-calculation-api) instead.
subscriptionDraftDiscountRemove

Removes a subscription discount from a subscription draft.

⚠️ Deprecated: Use the [SubscriptionContractCalculation API](https://shopify.dev/docs/apps/build/purchase-options/subscriptions/contracts/migrate-to-subscription-calculation-api) instead.
subscriptionDraftDiscountUpdate

Updates a subscription discount on a subscription draft.

⚠️ Deprecated: Use the [SubscriptionContractCalculation API](https://shopify.dev/docs/apps/build/purchase-options/subscriptions/contracts/migrate-to-subscription-calculation-api) instead.
subscriptionDraftFreeShippingDiscountAdd

Adds a subscription free shipping discount to a subscription draft.

⚠️ Deprecated: Use the [SubscriptionContractCalculation API](https://shopify.dev/docs/apps/build/purchase-options/subscriptions/contracts/migrate-to-subscription-calculation-api) instead.
subscriptionDraftFreeShippingDiscountUpdate

Updates a subscription free shipping discount on a subscription draft.

⚠️ Deprecated: Use the [SubscriptionContractCalculation API](https://shopify.dev/docs/apps/build/purchase-options/subscriptions/contracts/migrate-to-subscription-calculation-api) instead.
subscriptionDraftLineAdd

Adds a subscription line to a subscription draft.

⚠️ Deprecated: Use the [SubscriptionContractCalculation API](https://shopify.dev/docs/apps/build/purchase-options/subscriptions/contracts/migrate-to-subscription-calculation-api) instead.
subscriptionDraftLineRemove

Removes a subscription line from a subscription draft.

⚠️ Deprecated: Use the [SubscriptionContractCalculation API](https://shopify.dev/docs/apps/build/purchase-options/subscriptions/contracts/migrate-to-subscription-calculation-api) instead.
subscriptionDraftLineUpdate

Updates a subscription line on a subscription draft.

⚠️ Deprecated: Use the [SubscriptionContractCalculation API](https://shopify.dev/docs/apps/build/purchase-options/subscriptions/contracts/migrate-to-subscription-calculation-api) instead.
subscriptionDraftUpdate

Updates a Subscription Draft.

⚠️ Deprecated: Use the [SubscriptionContractCalculation API](https://shopify.dev/docs/apps/build/purchase-options/subscriptions/contracts/migrate-to-subscription-calculation-api) instead.

Type Changes

➕ Added Types (37)

📥BarcodeInput➕ AddedINPUT_OBJECT

The input fields for barcodes that are associated with a product variant. A variant accepts up to
20 barcodes, and a given variant input can't
set both barcode and barcodes. Refer to the
ProductVariantBarcode
object for how these barcodes are returned.

📋BarcodeType➕ AddedENUM

The identifier standard that a barcode value conforms to. A single value can satisfy more than one
standard, so declare the standard that the merchant or supplier assigned. If no BarcodeType is provided,
then no standard was declared and the value is stored as entered.

Values: UPC, EAN, ISBN, GTIN, ASIN
📥CalculateRequestedOrderEditInput➕ AddedINPUT_OBJECT

The input fields to calculate the financial outcome of a requested order edit.

📥CalculateRequestedOrderEditLineItemRemovalInput➕ AddedINPUT_OBJECT

The input fields for a line item removal on a calculated edit.

📥CalculateRequestedOrderEditLineItemsInput➕ AddedINPUT_OBJECT

The input fields for the line item changes in an edit calculation, grouped by the type of change.

🏗️CalculatedRequestedOrderEdit➕ AddedOBJECT

The calculated financial outcome of an edit based on the line items requested for editing.

Fields: financialSummary, lineItems
🏗️CalculatedRequestedOrderEditLineItem➕ AddedOBJECT

The line item being processed for an edit and its calculated monetary values.

Fields: lineItem, quantity, subtotalSet, totalTaxSet
🏗️CalculatedRequestedOrderEditLineItemConnection➕ AddedOBJECT

An auto-generated type for paginating through multiple CalculatedRequestedOrderEditLineItems.

Fields: edges, nodes, pageInfo
🏗️CalculatedRequestedOrderEditLineItemEdge➕ AddedOBJECT

An auto-generated type which holds one CalculatedRequestedOrderEditLineItem and a cursor during pagination.

Fields: cursor, node
🏗️CalculatedRequestedOrderEditLineItems➕ AddedOBJECT

The line item changes on a calculated edit, grouped by the type of change.

Fields: removals
📋OrderDisplayRequestedEditStatus➕ AddedENUM

The order's aggregated requested edit status that's used for display purposes.
An order might have multiple requested edits, so this field communicates the prioritized status.
The OrderDisplayRequestedEditStatus enum is a supported filter parameter in the orders query.

Values: NONE, REQUESTED, RESOLVED, DENIED
🏗️ProductVariantBarcode➕ AddedOBJECT

A barcode associated with a product variant.

A variant supports up to 20 barcodes, each of
which can have a
type.
Barcode types are validated against their respective format standards.

Fields: type, value
🏗️ProductVariantBarcodeConnection➕ AddedOBJECT

An auto-generated type for paginating through multiple ProductVariantBarcodes.

Fields: edges, nodes, pageInfo
🏗️ProductVariantBarcodeEdge➕ AddedOBJECT

An auto-generated type which holds one ProductVariantBarcode and a cursor during pagination.

Fields: cursor, node
🏗️RequestedOrderEdit➕ AddedOBJECT

A buyer-initiated request to edit unfulfilled line items on an order.

Fields: createdAt, id, lineItems, order, requestApprovedAt ... +4 more
🏗️RequestedOrderEditConnection➕ AddedOBJECT

An auto-generated type for paginating through multiple RequestedOrderEdits.

Fields: edges, nodes, pageInfo
📥RequestedOrderEditCreateInput➕ AddedINPUT_OBJECT

The input fields for creating a requested edit.

🏗️RequestedOrderEditCreatePayload➕ AddedOBJECT

Return type for requestedOrderEditCreate mutation.

Fields: requestedOrderEdit, userErrors
🏗️RequestedOrderEditCreateUserError➕ AddedOBJECT

Errors related to creating a requested edit.

Fields: code, field, message
📋RequestedOrderEditCreateUserErrorCode➕ AddedENUM

Possible error codes that can be returned by RequestedOrderEditCreateUserError.

Values: NOT_FOUND, INVALID, INTERNAL_ERROR, BLANK
📥RequestedOrderEditDeclineInput➕ AddedINPUT_OBJECT

The input fields for declining a requested edit.

🏗️RequestedOrderEditDeclinePayload➕ AddedOBJECT

Return type for requestedOrderEditDecline mutation.

Fields: requestedOrderEdit, userErrors
🏗️RequestedOrderEditDeclineUserError➕ AddedOBJECT

Errors related to declining a requested edit.

Fields: code, field, message
📋RequestedOrderEditDeclineUserErrorCode➕ AddedENUM

Possible error codes that can be returned by RequestedOrderEditDeclineUserError.

Values: NOT_FOUND, INVALID
🏗️RequestedOrderEditEdge➕ AddedOBJECT

An auto-generated type which holds one RequestedOrderEdit and a cursor during pagination.

Fields: cursor, node
🏗️RequestedOrderEditFinancialSummary➕ AddedOBJECT

The financial breakdown of the edit.

Fields: editOrderLevelDiscountSubtotalSet, editSubtotalBeforeTargetAllDiscountsSet, editSubtotalSet, editSubtotalWithCartDiscountSet, editTotalSet ... +1 more
🏗️RequestedOrderEditLineItem➕ AddedOBJECT

A line item included in a buyer-initiated requested edit.

Fields: id, lineItem, quantity, resolvedQuantity
🏗️RequestedOrderEditLineItemConnection➕ AddedOBJECT

An auto-generated type for paginating through multiple RequestedOrderEditLineItems.

Fields: edges, nodes, pageInfo
🏗️RequestedOrderEditLineItemEdge➕ AddedOBJECT

An auto-generated type which holds one RequestedOrderEditLineItem and a cursor during pagination.

Fields: cursor, node
📥RequestedOrderEditLineItemRemovalInput➕ AddedINPUT_OBJECT

The input fields for a line item requested for removal in a requested edit.

🏗️RequestedOrderEditLineItems➕ AddedOBJECT

The line item changes on a requested edit, grouped by the type of change.

Fields: removals
📥RequestedOrderEditLineItemsInput➕ AddedINPUT_OBJECT

The input fields for the line item changes in a requested edit, grouped by the type of change.

📥RequestedOrderEditResolveInput➕ AddedINPUT_OBJECT

The input fields for resolving a requested edit.

🏗️RequestedOrderEditResolvePayload➕ AddedOBJECT

Return type for requestedOrderEditResolve mutation.

Fields: requestedOrderEdit, userErrors
🏗️RequestedOrderEditResolveUserError➕ AddedOBJECT

Errors related to resolving a requested edit.

Fields: code, field, message
📋RequestedOrderEditResolveUserErrorCode➕ AddedENUM

Possible error codes that can be returned by RequestedOrderEditResolveUserError.

Values: NOT_FOUND, INVALID
📋RequestedOrderEditStatus➕ AddedENUM

The status of a buyer-initiated requested edit.

Values: REQUESTED, RESOLVED, DENIED

➖ Removed Types (32)

📥CalculateRequestedEditInput➖ RemovedINPUT_OBJECT

The input fields to calculate the financial outcome of a requested order edit.

📥CalculateRequestedEditLineItemRemovalInput➖ RemovedINPUT_OBJECT

The input fields for a line item removal on a calculated edit.

📥CalculateRequestedEditLineItemsInput➖ RemovedINPUT_OBJECT

The input fields for the line item changes in an edit calculation, grouped by the type of change.

🏗️CalculatedRequestedEdit➖ RemovedOBJECT

The calculated financial outcome of an edit based on the line items requested for editing.

Fields: financialSummary, lineItems
🏗️CalculatedRequestedEditLineItem➖ RemovedOBJECT

The line item being processed for an edit and its calculated monetary values.

Fields: lineItem, quantity, subtotalSet, totalTaxSet
🏗️CalculatedRequestedEditLineItemConnection➖ RemovedOBJECT

An auto-generated type for paginating through multiple CalculatedRequestedEditLineItems.

Fields: edges, nodes, pageInfo
🏗️CalculatedRequestedEditLineItemEdge➖ RemovedOBJECT

An auto-generated type which holds one CalculatedRequestedEditLineItem and a cursor during pagination.

Fields: cursor, node
🏗️CalculatedRequestedEditLineItems➖ RemovedOBJECT

The line item changes on a calculated edit, grouped by the type of change.

Fields: removals
📋OrderRequestedEditStatus➖ RemovedENUM

The order's aggregated requested edit status that's used for display purposes.
An order might have multiple requested edits, so this field communicates the prioritized status.
The OrderRequestedEditStatus enum is a supported filter parameter in the orders query.

Values: NONE, REQUESTED, RESOLVED, DENIED
🏗️RequestedEdit➖ RemovedOBJECT

A buyer-initiated request to edit unfulfilled line items on an order.

Fields: createdAt, id, lineItems, order, requestApprovedAt ... +4 more
🏗️RequestedEditConnection➖ RemovedOBJECT

An auto-generated type for paginating through multiple RequestedEdits.

Fields: edges, nodes, pageInfo
📥RequestedEditCreateInput➖ RemovedINPUT_OBJECT

The input fields for creating a requested edit.

🏗️RequestedEditCreatePayload➖ RemovedOBJECT

Return type for requestedEditCreate mutation.

Fields: requestedEdit, userErrors
🏗️RequestedEditCreateUserError➖ RemovedOBJECT

Errors related to creating a requested edit.

Fields: code, field, message
📋RequestedEditCreateUserErrorCode➖ RemovedENUM

Possible error codes that can be returned by RequestedEditCreateUserError.

Values: NOT_FOUND, INVALID, INTERNAL_ERROR, BLANK
📥RequestedEditDeclineInput➖ RemovedINPUT_OBJECT

The input fields for declining a requested edit.

🏗️RequestedEditDeclinePayload➖ RemovedOBJECT

Return type for requestedEditDecline mutation.

Fields: requestedEdit, userErrors
🏗️RequestedEditDeclineUserError➖ RemovedOBJECT

Errors related to declining a requested edit.

Fields: code, field, message
📋RequestedEditDeclineUserErrorCode➖ RemovedENUM

Possible error codes that can be returned by RequestedEditDeclineUserError.

Values: NOT_FOUND, INVALID
🏗️RequestedEditEdge➖ RemovedOBJECT

An auto-generated type which holds one RequestedEdit and a cursor during pagination.

Fields: cursor, node
🏗️RequestedEditFinancialSummary➖ RemovedOBJECT

The financial breakdown of the edit.

Fields: editOrderLevelDiscountSubtotalSet, editSubtotalBeforeTargetAllDiscountsSet, editSubtotalSet, editSubtotalWithCartDiscountSet, editTotalSet ... +1 more
🏗️RequestedEditLineItem➖ RemovedOBJECT

A line item included in a buyer-initiated requested edit.

Fields: id, lineItem, quantity, resolvedQuantity
🏗️RequestedEditLineItemConnection➖ RemovedOBJECT

An auto-generated type for paginating through multiple RequestedEditLineItems.

Fields: edges, nodes, pageInfo
🏗️RequestedEditLineItemEdge➖ RemovedOBJECT

An auto-generated type which holds one RequestedEditLineItem and a cursor during pagination.

Fields: cursor, node
📥RequestedEditLineItemRemovalInput➖ RemovedINPUT_OBJECT

The input fields for a line item requested for removal in a requested edit.

🏗️RequestedEditLineItems➖ RemovedOBJECT

The line item changes on a requested edit, grouped by the type of change.

Fields: removals
📥RequestedEditLineItemsInput➖ RemovedINPUT_OBJECT

The input fields for the line item changes in a requested edit, grouped by the type of change.

📥RequestedEditResolveInput➖ RemovedINPUT_OBJECT

The input fields for resolving a requested edit.

🏗️RequestedEditResolvePayload➖ RemovedOBJECT

Return type for requestedEditResolve mutation.

Fields: requestedEdit, userErrors
🏗️RequestedEditResolveUserError➖ RemovedOBJECT

Errors related to resolving a requested edit.

Fields: code, field, message
📋RequestedEditResolveUserErrorCode➖ RemovedENUM

Possible error codes that can be returned by RequestedEditResolveUserError.

Values: NOT_FOUND, INVALID
📋RequestedEditStatus➖ RemovedENUM

The status of a buyer-initiated requested edit.

Values: REQUESTED, RESOLVED, DENIED

🔄 Modified Types (10)

🏗️Company🔄 Modified
🔄 Field modified: orders
🏗️Customer🔄 Modified
🔄 Field modified: orders
🏗️GiftCardProductSetUserErrorCode🔄 Modified
➕ Enum value added: INCOMPATIBLE_BARCODE_FIELDS
➕ Enum value added: BLANK_BARCODE_VALUE
➕ Enum value added: TOO_MANY_BARCODES
➕ Enum value added: BARCODE_VALUE_TOO_LONG
➕ Enum value added: DUPLICATE_BARCODE_VALUE
➕ Enum value added: INVALID_BARCODE_TYPE
➕ Enum value added: INVALID_BARCODE_SEPARATORS
➕ Enum value added: INVALID_BARCODE_LENGTH
➕ Enum value added: INVALID_BARCODE_PREFIX
➕ Enum value added: INVALID_BARCODE_CHARACTERS
➕ Enum value added: BARCODE_CHECKSUM_VALIDATION_FAILED
🏗️Order🔄 Modified
➖ Field removed: requestedEditStatus
➖ Field removed: requestedEdits
➕ Field added: displayRequestedEditStatus

The order's aggregated requested edit status for display purposes.
Indicates the overall state of buyer-initiated requested edits for the order,
helping merchants track and manage pending requests.

➕ Field added: requestedOrderEdits

The buyer-initiated requested edits on unfulfilled line items for this order.

🏗️ProductSetUserErrorCode🔄 Modified
➕ Enum value added: INCOMPATIBLE_BARCODE_FIELDS
➕ Enum value added: BLANK_BARCODE_VALUE
➕ Enum value added: TOO_MANY_BARCODES
➕ Enum value added: BARCODE_VALUE_TOO_LONG
➕ Enum value added: DUPLICATE_BARCODE_VALUE
➕ Enum value added: INVALID_BARCODE_TYPE
➕ Enum value added: INVALID_BARCODE_SEPARATORS
➕ Enum value added: INVALID_BARCODE_LENGTH
➕ Enum value added: INVALID_BARCODE_PREFIX
➕ Enum value added: INVALID_BARCODE_CHARACTERS
➕ Enum value added: BARCODE_CHECKSUM_VALIDATION_FAILED
🏗️ProductVariant🔄 Modified
➕ Field added: barcodes

The barcodes associated with the product variant.

A variant supports up to 20 barcodes, each of
which can have a
type.
Barcode types are validated against their respective format standards.

🏗️ProductVariantsBulkCreateUserErrorCode🔄 Modified
➕ Enum value added: INCOMPATIBLE_BARCODE_FIELDS
➕ Enum value added: BLANK_BARCODE_VALUE
➕ Enum value added: TOO_MANY_BARCODES
➕ Enum value added: BARCODE_VALUE_TOO_LONG
➕ Enum value added: DUPLICATE_BARCODE_VALUE
➕ Enum value added: INVALID_BARCODE_TYPE
➕ Enum value added: INVALID_BARCODE_SEPARATORS
➕ Enum value added: INVALID_BARCODE_LENGTH
➕ Enum value added: INVALID_BARCODE_PREFIX
➕ Enum value added: INVALID_BARCODE_CHARACTERS
➕ Enum value added: BARCODE_CHECKSUM_VALIDATION_FAILED
🏗️ProductVariantsBulkUpdateUserErrorCode🔄 Modified
➕ Enum value added: INCOMPATIBLE_BARCODE_FIELDS
➕ Enum value added: BLANK_BARCODE_VALUE
➕ Enum value added: TOO_MANY_BARCODES
➕ Enum value added: BARCODE_VALUE_TOO_LONG
➕ Enum value added: DUPLICATE_BARCODE_VALUE
➕ Enum value added: INVALID_BARCODE_TYPE
➕ Enum value added: INVALID_BARCODE_SEPARATORS
➕ Enum value added: INVALID_BARCODE_LENGTH
➕ Enum value added: INVALID_BARCODE_PREFIX
➕ Enum value added: INVALID_BARCODE_CHARACTERS
➕ Enum value added: BARCODE_CHECKSUM_VALIDATION_FAILED
🏗️Shop🔄 Modified
🔄 Field modified: orders
🏗️WebhookSubscriptionTopic🔄 Modified
➖ Enum value removed: REQUESTED_EDITS_CREATE
➖ Enum value removed: REQUESTED_EDITS_RESOLVE
➖ Enum value removed: REQUESTED_EDITS_DENY
➕ Enum value added: REQUESTED_ORDER_EDIT_CREATED
➕ Enum value added: REQUESTED_ORDER_EDIT_RESOLVED
➕ Enum value added: REQUESTED_ORDER_EDIT_DENIED