Add subscriptionContractCalculation query

8/6/2026, 12:00:58 AM

Shopify’s Admin GraphQL API now includes a subscriptionContractCalculation query, enabling clients to inspect the status of calculation jobs started by mutations such as subscriptionContractCreateCalculate, subscriptionContractUpdateCalculate, and subscriptionBillingCycleContractEditCalculate. The query accepts a single non‑null id and returns a union type that resolves to a pending, succeeded, or failure calculation. When the calculation succeeds, the returned object can be committed with the subscriptionContractCalculationCommit mutation. No breaking changes have been introduced to the existing collections, collectionsCount, productVariants, products, or productsCount queries; the adjustments are purely in documentation for the query argument. This addition equips developers building subscription contracts to poll and manage calculation life‑cycles more effectively. All other queries continue to operate as before with the same pagination and filtering capabilities.

Query Changes

➕ Added Queries (1)

subscriptionContractCalculation

Returns a subscription contract calculation by ID. Use this query to poll a calculation started by subscriptionContractCreateCalculate, subscriptionContractUpdateCalculate, or subscriptionBillingCycleContractEditCalculate until it succeeds or fails.

The result resolves to a pending, succeeded, or failure type. Commit a succeeded calculation with the subscriptionContractCalculationCommit mutation.

Learn how to build a subscription contract.

🔄 Modified Queries (5)

collections

Retrieves a list of collections
in a store. Collections are groups of products
that merchants can organize for display in their online store and
other sales channels.
For example, an athletics store might create different collections for running attire, shoes, and accessories.

Use the collections query when you need to:

  • Build a browsing interface for a store's product groupings.
  • Create collection searching, sorting, and filtering experiences (for example, by title, type, or published status).
  • Sync collection data with external systems.

The collections query supports pagination
for large catalogs and saved searches
for frequently used collection queries.

The collections query returns collections with their associated metadata, including:

  • Basic collection information (title, description, handle, and type)
  • Collection image and SEO metadata
  • Product count and product relationships
  • Collection rules or conditions
  • Publishing status and publication details
  • Metafields and custom attributes

Learn more about using metafields with collection conditions.

~ Modified argument: query
collectionsCount

Count of collections. Limited to a maximum of 10000 by default.

~ Modified argument: query
productVariants

Retrieves a list of product variants
associated with a product.

A product variant is a specific version of a product that comes in more than
one option,
such as size or color. For example, if a merchant sells t-shirts with options for size and color,
then a small, blue t-shirt would be one product variant and a large, blue t-shirt would be another.

Use the productVariants query when you need to:

  • Search for product variants by attributes such as SKU, barcode, or inventory quantity.
  • Filter product variants by attributes, such as whether they're gift cards or have custom metafields.
  • Fetch product variants for bulk operations, such as updating prices or inventory.
  • Preload data for product variants, such as inventory items, selected options, or associated products.

The productVariants query supports pagination
to handle large product catalogs and saved searches
for frequently used product variant queries.

The productVariants query returns product variants with their associated metadata, including:

  • Basic product variant information (for example, title, SKU, barcode, price, and inventory)
  • Media attachments (for example, images and videos)
  • Associated products, selling plans, bundles, and metafields

Learn more about working with Shopify's product model.

~ Modified argument: query
products

Retrieves a list of products
in a store. Products are the items that merchants can sell in their store.

Use the products query when you need to:

  • Build a browsing interface for a product catalog.
  • Create product searching, sorting, and filtering experiences.
  • Implement product recommendations.
  • Sync product data with external systems.

The products query supports pagination
to handle large product catalogs and saved searches
for frequently used product queries.

The products query returns products with their associated metadata, including:

  • Basic product information (for example, title, description, vendor, and type)
  • Product options and product variants, with their prices and inventory
  • Media attachments (for example, images and videos)
  • SEO metadata
  • Product categories and tags
  • Product availability and publishing statuses

Learn more about working with Shopify's product model.

~ Modified argument: query
productsCount

Count of products. Limited to a maximum of 10000 by default.

~ Modified argument: query

Mutation Changes

➕ Added Mutations (4)

subscriptionBillingCycleContractEditCalculate

Starts an asynchronous calculation for changes to a single billing cycle of an existing subscription contract. Committing the calculation applies the changes only to the selected cycle, leaving the recurring contract unchanged.

Poll the subscriptionContractCalculation query to review the calculated contract, then commit it with the subscriptionContractCalculationCommit mutation.

Learn how to update a subscription contract.

subscriptionContractCalculationCommit

Commits a succeeded subscription contract calculation. For a create or update calculation, committing makes the calculated contract the contract's new active version used for future billing. For a billing cycle edit, committing applies the calculated contract only to the selected cycle.

The calculation must be in a succeeded state, which you can confirm with the subscriptionContractCalculation query. Returns the committed contract as a SubscriptionContract, or a SubscriptionBillingCycleEditedContract for a billing cycle edit.

Learn how to build a subscription contract.

subscriptionContractCreateCalculate

Starts an asynchronous calculation for a new subscription contract. The contract isn't created until you commit the calculation.

Poll the subscriptionContractCalculation query to review the calculated contract, its projected order totals, and any warnings, then commit it with the subscriptionContractCalculationCommit mutation.

Learn how to build a subscription contract.

subscriptionContractUpdateCalculate

Starts an asynchronous calculation for changes to an existing subscription contract. The changes aren't applied to the contract until you commit the calculation, and fields omitted from the input remain unchanged.

Poll the subscriptionContractCalculation query to review the calculated contract, its projected order totals, and any warnings, then commit it with the subscriptionContractCalculationCommit mutation.

Learn how to update a subscription contract.

Type Changes

➕ Added Types (63)

🏗️SubscriptionBillingCycleContractEditCalculatePayload➕ AddedOBJECT

Return type for subscriptionBillingCycleContractEditCalculate mutation.

Fields: subscriptionContractCalculation, userErrors
🏗️SubscriptionBillingCycleContractEditCalculateUserError➕ AddedOBJECT

An error that occurs during the execution of SubscriptionBillingCycleContractEditCalculate.

Fields: code, field, message
📋SubscriptionBillingCycleContractEditCalculateUserErrorCode➕ AddedENUM

Possible error codes that can be returned by SubscriptionBillingCycleContractEditCalculateUserError.

Values: INVALID
🏗️SubscriptionCalculatedContract➕ AddedOBJECT

A calculated subscription contract that can be previewed before committing.

Fields: billingPolicy, currencyCode, customAttributes, customer, customerPaymentMethod ... +7 more
🔀SubscriptionCommittedContract➕ AddedUNION

The committed result of a subscription contract calculation.

🔀SubscriptionContractCalculation➕ AddedUNION

The result of a subscription contract calculation, returned by the subscriptionContractCalculation query. Because calculations run asynchronously, the concrete type reflects the calculation's current state: SubscriptionContractCalculationPending while it's still processing, SubscriptionContractCalculationSuccess once it's ready to commit, or SubscriptionContractCalculationFailure if it failed, whose errors field describes what went wrong. Poll the query until the type is no longer pending.

📥SubscriptionContractCalculationAnchorInput➕ AddedINPUT_OBJECT

The input fields for subscription contract anchors used for contract calculation.
This is a oneOf input: one, and only one, field can be provided.

📥SubscriptionContractCalculationAppManagedBillingConfigInput➕ AddedINPUT_OBJECT

The input fields for app-managed billing configuration for subscriptions contracts. These fields are stored on the contract but are not used to calculate billing cycle dates.

📥SubscriptionContractCalculationAppManagedPricingPolicyInput➕ AddedINPUT_OBJECT

The input fields for app-managed pricing policy for subscription lines. These fields are stored on the contract line but do not drive pricing calculations. The actual line price is determined by the line's current price.

📥SubscriptionContractCalculationBillingCycleEditInput➕ AddedINPUT_OBJECT

The input fields for editing a subscription contract for a single billing cycle, used for
contract calculation. Any field provided will update or replace the corresponding value for
the targeted cycle. Fields that are omitted will be left unchanged. Contract-level
attributes such as billing policy, delivery policy, and payment method cannot be changed by
a billing cycle edit.

📥SubscriptionContractCalculationBillingPolicyInput➕ AddedINPUT_OBJECT

The input fields for subscription billing policy used for contract calculation.

📥SubscriptionContractCalculationCadenceInput➕ AddedINPUT_OBJECT

The input fields for subscription cadence in the calculate API.

📋SubscriptionContractCalculationCadenceUnit➕ AddedENUM

The unit types for subscription cadence.

Values: DAY, WEEK, MONTH, YEAR
🏗️SubscriptionContractCalculationCommitPayload➕ AddedOBJECT

Return type for subscriptionContractCalculationCommit mutation.

Fields: contract, userErrors
🏗️SubscriptionContractCalculationCommitUserError➕ AddedOBJECT

An error that occurs during the execution of SubscriptionContractCalculationCommit.

Fields: code, field, message
📋SubscriptionContractCalculationCommitUserErrorCode➕ AddedENUM

Possible error codes that can be returned by SubscriptionContractCalculationCommitUserError.

Values: INVALID, NOT_READY_TO_COMMIT, CALCULATION_NOT_FOUND, STALE_CONTRACT, INVALID_BILLING_DATE
📥SubscriptionContractCalculationComponentLineInput➕ AddedINPUT_OBJECT

The input fields for a single component of a parent line in the calculate API.
This is a oneOf input: one, and only one, field can be provided.

📥SubscriptionContractCalculationContractCreateInput➕ AddedINPUT_OBJECT

The input fields for calculating a new subscription contract. Provide the complete desired state of the contract. The contract isn't created until you commit the calculation with the subscriptionContractCalculationCommit mutation.

Learn how to build a subscription contract.

📥SubscriptionContractCalculationContractUpdateInput➕ AddedINPUT_OBJECT

The input fields for calculating changes to an existing subscription contract. Each field you provide replaces the corresponding value on the contract, and omitted fields remain unchanged. For list fields, provide the complete replacement list, including the id of each existing item that you want to keep.

Learn how to update a subscription contract.

📥SubscriptionContractCalculationCustomLineInput➕ AddedINPUT_OBJECT

The input fields for custom subscription lines in the calculate API.

📥SubscriptionContractCalculationCustomerPaymentMethodInput➕ AddedINPUT_OBJECT

The input fields for a customer payment method used during a contract calculation.

📥SubscriptionContractCalculationCyclePriceAdjustmentInput➕ AddedINPUT_OBJECT

The input fields for a price adjustment entry within an app-managed pricing policy. Stored as metadata for app use, not used for pricing calculations.

📥SubscriptionContractCalculationDeliveryDiscountInput➕ AddedINPUT_OBJECT

The input fields for delivery discount in the calculate API.

📥SubscriptionContractCalculationDeliveryMethodInput➕ AddedINPUT_OBJECT

The input fields for delivery used during a contract calculation.
This is a oneOf input: one, and only one, field can be provided.

Provide shipping, localDelivery, or pickup to set the committed delivery method.
Provide none to explicitly set no delivery method (digital-only subscriptions).
Provide fetchAvailableDeliveryOptions to discover the available delivery options for an
address without changing the contract's committed delivery method.

📥SubscriptionContractCalculationDeliveryMethodLocalDeliveryInput➕ AddedINPUT_OBJECT

The input fields for local delivery method used for contract calculation.

📥SubscriptionContractCalculationDeliveryMethodPickupInput➕ AddedINPUT_OBJECT

The input fields for pickup delivery method used for contract calculation.

📥SubscriptionContractCalculationDeliveryMethodShippingInput➕ AddedINPUT_OBJECT

The input fields for shipping delivery method used for contract calculation.

🔀SubscriptionContractCalculationDeliveryOption➕ AddedUNION

An available delivery option for a subscription contract calculation.

📥SubscriptionContractCalculationDeliveryPolicyInput➕ AddedINPUT_OBJECT

The input fields for subscription delivery policy used for contract calculation.

🏗️SubscriptionContractCalculationDiagnostic➕ AddedOBJECT

A diagnostic (error or warning) emitted during a subscription contract calculation.

Fields: code, field, message
📋SubscriptionContractCalculationDiagnosticCode➕ AddedENUM

Diagnostic codes for subscription contract calculation errors and warnings.

Values: INVALID, MERCHANDISE_NOT_FOUND, DELIVERY_ADDRESS_INVALID, CURRENCY_NOT_SUPPORTED, DELIVERY_NO_LOCATION_SHIPS_TO_ADDRESS, DELIVERY_PICKUP_LOCATION_UNAVAILABLE, PAYMENT_METHOD_NOT_FOUND, CUSTOM_VALIDATION ... +8 more
📥SubscriptionContractCalculationDiscountCodeInput➕ AddedINPUT_OBJECT

The input fields for a discount code in the calculate API.

📥SubscriptionContractCalculationDiscountFixedAmountInput➕ AddedINPUT_OBJECT

The input fields for fixed amount discount in the calculate API.

📥SubscriptionContractCalculationDiscountValueInput➕ AddedINPUT_OBJECT

The input fields for discount value used for contract calculation.
This is a oneOf input: one, and only one, field can be provided.

🏗️SubscriptionContractCalculationFailure➕ AddedOBJECT

A subscription contract calculation that has failed.

Fields: errors, id
📥SubscriptionContractCalculationFetchDeliveryOptionsInput➕ AddedINPUT_OBJECT

The input fields to fetch the available delivery options for an address.

Use this to discover the delivery options available for the contract
without setting or changing the contract's committed delivery method.

📥SubscriptionContractCalculationLineDiscountInput➕ AddedINPUT_OBJECT

The input fields for a line-scoped discount in the calculate API. Applies to the line it is provided on.

📥SubscriptionContractCalculationLineInput➕ AddedINPUT_OBJECT

The input fields for subscription lines used for contract calculation.
This is a oneOf input: one, and only one, field can be provided.

🏗️SubscriptionContractCalculationLocalDeliveryOption➕ AddedOBJECT

An available local delivery option for a subscription contract calculation.

Fields: code, description, phoneRequired, presentmentTitle, price ... +1 more
📥SubscriptionContractCalculationManualDiscountInput➕ AddedINPUT_OBJECT

The input fields for a manual (merchant-specified) discount used for contract calculation.
This is a oneOf input: one, and only one, field can be provided.
Line-scoped discounts are provided on the line inputs instead. Discount codes are provided
through the separate discountCodes field.

📥SubscriptionContractCalculationMonthdayAnchorInput➕ AddedINPUT_OBJECT

The input fields for monthday anchor in the calculate API.

📥SubscriptionContractCalculationMultipleFulfillmentConfigInput➕ AddedINPUT_OBJECT

The input fields for multiple fulfillment configuration used for contract calculation.

📥SubscriptionContractCalculationOrderDiscountInput➕ AddedINPUT_OBJECT

The input fields for an order discount in the calculate API. Applies to all lines on the contract.

📥SubscriptionContractCalculationPaymentMethodInput➕ AddedINPUT_OBJECT

The input fields for the payment method used during a contract calculation.
This is a oneOf input: one, and only one, field can be provided.

Provide customerPaymentMethod to set a vaulted customer payment method.
Provide none to explicitly set no payment method.

🏗️SubscriptionContractCalculationPending➕ AddedOBJECT

A subscription contract calculation that is still processing asynchronously.

Fields: id
🏗️SubscriptionContractCalculationPickupOption➕ AddedOBJECT

An available pickup option for a subscription contract calculation.

Fields: code, description, location, phoneRequired, pickupTime ... +3 more
📥SubscriptionContractCalculationProductVariantLineInput➕ AddedINPUT_OBJECT

The input fields for product variant subscription lines in the calculate API.

📥SubscriptionContractCalculationProductVariantParentLineInput➕ AddedINPUT_OBJECT

The input fields for product variant bundle parent subscription lines in the calculate API.

🏗️SubscriptionContractCalculationProjectedOrderTotals➕ AddedOBJECT

Projected order totals for a successfully calculated subscription contract. The figures are derived from the calculation's cost breakdown; taxes are estimated.

Fields: subtotal, total, totalDelivery, totalDeliveryDiscounts, totalMerchandiseDiscounts ... +1 more
🏗️SubscriptionContractCalculationShippingOption➕ AddedOBJECT

An available shipping option for a subscription contract calculation.

Fields: code, description, phoneRequired, presentmentTitle, price ... +1 more
🏗️SubscriptionContractCalculationSuccess➕ AddedOBJECT

A subscription contract calculation that has completed successfully.

Fields: calculatedContract, deliveryOptions, id, projectedOrderTotals, warnings
📥SubscriptionContractCalculationWeekdayAnchorInput➕ AddedINPUT_OBJECT

The input fields for weekday anchor in the calculate API.

📥SubscriptionContractCalculationYeardayAnchorInput➕ AddedINPUT_OBJECT

The input fields for yearday anchor in the calculate API.

🏗️SubscriptionContractCreateCalculatePayload➕ AddedOBJECT

Return type for subscriptionContractCreateCalculate mutation.

Fields: subscriptionContractCalculation, userErrors
🏗️SubscriptionContractCreateCalculateUserError➕ AddedOBJECT

An error that occurs during the execution of SubscriptionContractCreateCalculate.

Fields: code, field, message
📋SubscriptionContractCreateCalculateUserErrorCode➕ AddedENUM

Possible error codes that can be returned by SubscriptionContractCreateCalculateUserError.

Values: INVALID
🏗️SubscriptionContractUpdateCalculatePayload➕ AddedOBJECT

Return type for subscriptionContractUpdateCalculate mutation.

Fields: subscriptionContractCalculation, userErrors
🏗️SubscriptionContractUpdateCalculateUserError➕ AddedOBJECT

An error that occurs during the execution of SubscriptionContractUpdateCalculate.

Fields: code, field, message
📋SubscriptionContractUpdateCalculateUserErrorCode➕ AddedENUM

Possible error codes that can be returned by SubscriptionContractUpdateCalculateUserError.

Values: INVALID
🔀SubscriptionGroupedLine➕ AddedUNION

A subscription contract line grouped by bundle parent: either a standalone line or a bundle parent line and its components.

🏗️SubscriptionGroupedLineConnection➕ AddedOBJECT

An auto-generated type for paginating through multiple SubscriptionGroupedLines.

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

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

Fields: cursor, node
🏗️SubscriptionParentLine➕ AddedOBJECT

Represents a Subscription Parent Line.

Fields: bundledBy, components, customAttributes, id, presentmentTitle ... +5 more

🔄 Modified Types (11)

🏗️Channel🔄 Modified
🔄 Field modified: productsCount
🏗️LocationItemQuantity🔄 Modified
🔄 Field modified: committed
🏗️Product🔄 Modified
🔄 Field modified: collections
🔄 Field modified: productParents
🏗️ProductVariant🔄 Modified
🔄 Field modified: productParents
🏗️Publication🔄 Modified
🔄 Field modified: includedProducts
🔄 Field modified: includedProductsCount
🔄 Field modified: products
🏗️ShippingLabelPurchaseUserErrorCode🔄 Modified
Enum value added: PACKAGE_CARRIER_MISMATCH
🏗️Shop🔄 Modified
🔄 Field modified: collections
🔄 Field modified: productVariants
🔄 Field modified: products
🏗️SubscriptionBillingCycleEditedContract🔄 Modified
Field added: groupedLines

The list of subscription lines grouped by bundle parent, with bundle components nested under their parent line.

Field added: latestCommittedProjectedOrderTotals

The projected order totals from the last successful commit of the subscription contract. Returns null when no projected order totals have been persisted for the contract.

🏗️SubscriptionContract🔄 Modified
Field added: groupedLines

The list of subscription lines grouped by bundle parent, with bundle components nested under their parent line.

Field added: latestCommittedProjectedOrderTotals

The projected order totals from the last successful commit of the subscription contract. Returns null when no projected order totals have been persisted for the contract.

🏗️SubscriptionContractBase🔄 Modified
Field added: groupedLines

The list of subscription lines grouped by bundle parent, with bundle components nested under their parent line.

🏗️WebhookSubscriptionTopic🔄 Modified
Enum value added: SUBSCRIPTION_CONTRACT_CALCULATIONS_SUCCEED
Enum value added: SUBSCRIPTION_CONTRACT_CALCULATIONS_FAIL