Metaobject filter, mandate, translation, and payment updates

9/5/2025, 8:31:44 PM

Developers should note that metaobjects now expose an "adminFilterable" capability, with new types MetaobjectFieldCapabilityAdminFilterable and MetaobjectFieldDefinitionCapabilities added. CustomerPaymentMethod gains a paginated "mandates" field for payment mandates and the previous resourceId/resourceType fields are removed; the MandateResourceType enum changes, dropping CARD_ON_FILE and adding CREDENTIAL_ON_FILE. Images and MediaImage now include a "translations" field that supports locale and marketId filtering. The stagedUploadsCreate mutation’s description adds a 10β€―MB payload limit, and the metafieldsSet mutation also notes the same limit. Queries such as channel, domain, market, orders, and sellingPlanGroup have updated descriptions for clarity, though channel remains deprecated in favor of publication. Finally, new enum values (COLLECTION_NOT_FOUND, MANUALLY_SORTED_COLLECTION, INVALID_MOVE) appear in CollectionReorderProductsUserErrorCode, and PaymentTerms receives a new "canPayEarly" boolean field. These changes affect how your queries and mutations construct request payloads and handle responses in the latest unstable schema.

Query Changes

πŸ”„ Modified Queries (6)

channel

Returns a Channel resource by ID.

customerSegmentMembersQuery

Returns a CustomerSegmentMembersQuery resource by ID.

domain

Returns a Domain resource by ID.

market

Returns a Market resource by ID.

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.

sellingPlanGroup

Returns a SellingPlanGroup resource by ID.

Mutation Changes

πŸ”„ Modified Mutations (5)

appPurchaseOneTimeCreate

Creates a one-time charge for app features or services that don't require recurring billing. This mutation is ideal for apps that sell individual features, premium content, or services on a per-use basis rather than subscription models.

For example, a design app might charge merchants once for premium templates, or a marketing app could bill for individual campaign setups without ongoing monthly fees.

Use the AppPurchaseOneTimeCreate mutation to:

  • Charge for premium features or content purchases
  • Bill for professional services or setup fees
  • Generate revenue from one-time digital product sales

The mutation returns a confirmation URL that merchants must visit to approve the charge. Test and development stores are not charged, allowing safe testing of billing flows.

Explore one-time billing options on the app purchases page.

appSubscriptionCancel

Cancels an active app subscription, stopping future billing cycles. The cancellation behavior depends on the replacementBehavior setting - it can either disable auto-renewal (allowing the subscription to continue until the end of the current billing period) or immediately cancel with prorated refunds.

When a merchant decides to discontinue using subscription features, this mutation provides a clean cancellation workflow that respects billing periods and merchant expectations.

Use the AppSubscriptionCancel mutation to:

  • Process merchant-initiated subscription cancellations
  • Terminate subscriptions due to policy violations or account issues
  • Handle subscription cancellations during app uninstallation workflows

The cancellation timing and merchant access depends on the replacementBehavior setting and the app's specific implementation of subscription management.

For subscription lifecycle management and cancellation best practices, consult the subscription management guide.

appSubscriptionTrialExtend

Extends the trial period for an existing app subscription, giving merchants additional time to evaluate premium features before committing to paid billing. This mutation provides flexibility in trial management and can improve conversion rates by accommodating merchant needs.

Trial extensions are particularly valuable when merchants need more time to fully evaluate complex features, experience technical setup delays, or require additional approval processes within their organization before committing to paid subscriptions.

Use the AppSubscriptionTrialExtend mutation to:

  • Accommodate merchant requests for additional evaluation time
  • Compensate for service interruptions during trial periods
  • Support complex enterprise evaluation and approval workflows
  • Implement customer success strategies that improve trial-to-paid conversion
  • Handle technical onboarding delays that impact trial effectiveness

The extension modifies the existing trial end date, allowing continued access to subscription features without immediate billing. This approach maintains subscription continuity while providing merchants the flexibility they need for thorough feature evaluation.

Trial extension strategies and conversion techniques are covered in the offer free trials guide.

metafieldsSet

Sets metafield values. Metafield values will be set regardless if they were previously created or not.

Allows a maximum of 25 metafields to be set at a time, with a maximum total request payload size of 10MB.

This operation is atomic, meaning no changes are persisted if an error is encountered.

As of 2024-07, this operation supports compare-and-set functionality to better handle concurrent requests.
If compareDigest is set for any metafield, the mutation will only set that metafield if the persisted metafield value matches the digest used on compareDigest.
If the metafield doesn't exist yet, but you want to guarantee that the operation will run in a safe manner, set compareDigest to null.
The compareDigest value can be acquired by querying the metafield object and selecting compareDigest as a field.
If the compareDigest value does not match the digest for the persisted value, the mutation will return an error.
You can opt out of write guarantees by not sending compareDigest in the request.

stagedUploadsCreate

Creates staged upload targets for file uploads such as images, videos, and 3D models.

Use the stagedUploadsCreate mutation instead of direct file creation mutations when:

  • Uploading large files: Files over a few MB benefit from staged uploads for better reliability
  • Uploading media files: Videos, 3D models, and high-resolution images
  • Bulk importing: CSV files, product catalogs, or other bulk data
  • Using external file sources: When files are stored remotely and need to be transferred to Shopify

The stagedUploadsCreate mutation is the first step in Shopify's secure two-step upload process:

Step 1: Create staged upload targets (this mutation)

  • Generate secure, temporary upload URLs for your files.
  • Receive authentication parameters for the upload.

Step 2: Upload files and create assets

  • Upload your files directly to the provided URLs using the authentication parameters.
  • Use the returned resourceUrl as the originalSource in subsequent mutations like fileCreate.

This approach provides better performance for large files, handles network interruptions gracefully,
and ensures secure file transfers to Shopify's storage infrastructure.

Note:
File size is required when uploading
VIDEO or
MODEL_3D
resources.

After creating staged upload targets, complete the process by:

  1. Uploading files: Send your files to the returned url using the provided
    parameters
    for authentication
  2. Creating file assets: Use the resourceUrl
    as the originalSource in mutations such as:
    • fileCreate:
      Creates file assets from staged uploads
    • productUpdate:
      Updates products with new media from staged uploads

Learn more about uploading media to Shopify.

Type Changes

βž• Added Types (7)

πŸ—οΈMetaobjectFieldCapabilityAdminFilterableβž• AddedOBJECT

Information about the admin filterable capability.

Fields: eligible, enabled
πŸ“₯MetaobjectFieldCapabilityAdminFilterableInputβž• AddedINPUT_OBJECT

The input fields for enabling and disabling the admin filterable capability.

πŸ—οΈMetaobjectFieldDefinitionCapabilitiesβž• AddedOBJECT

Capabilities available for a metaobject field definition.

Fields: adminFilterable
πŸ“₯MetaobjectFieldDefinitionCapabilityCreateInputβž• AddedINPUT_OBJECT

The input fields for creating capabilities on a metaobject field definition.

πŸ—οΈPaymentMandateResourceβž• AddedOBJECT

A payment mandate with resource information, representing the permission
the owner of the payment instrument gives to the merchant to debit it
for specific resources (e.g., Order, Subscriptions).

Fields: resourceId, resourceType
πŸ—οΈPaymentMandateResourceConnectionβž• AddedOBJECT

An auto-generated type for paginating through multiple PaymentMandateResources.

Fields: edges, nodes, pageInfo
πŸ—οΈPaymentMandateResourceEdgeβž• AddedOBJECT

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

Fields: cursor, node

πŸ”„ Modified Types (16)

πŸ—οΈAppπŸ”„ Modified
πŸ”„ Field modified: installUrl
πŸ—οΈCalculatedDraftOrderπŸ”„ Modified
πŸ”„ Field modified: lineItemsSubtotalPrice
πŸ”„ Field modified: totalLineItemsPriceSet
πŸ—οΈChannelπŸ”„ Modified
πŸ”„ Field modified: collectionPublicationsV3
πŸ”„ Field modified: productPublicationsV3
πŸ—οΈCollectionReorderProductsUserErrorCodeπŸ”„ Modified
βž• Enum value added: COLLECTION_NOT_FOUND
βž• Enum value added: MANUALLY_SORTED_COLLECTION
βž• Enum value added: INVALID_MOVE
πŸ—οΈCustomerPaymentMethodπŸ”„ Modified
βž– Field removed: resourceId
βž– Field removed: resourceType
βž• Field added: mandates

The mandates associated with the payment method.

πŸ—οΈDraftOrderπŸ”„ Modified
πŸ”„ Field modified: lineItemsSubtotalPrice
πŸ”„ Field modified: totalLineItemsPriceSet
πŸ—οΈImageπŸ”„ Modified
βž• Field added: translations

The published translations associated with the resource.

πŸ—οΈInventoryLevelπŸ”„ Modified
πŸ”„ Field modified: quantities
πŸ—οΈInventoryQuantityπŸ”„ Modified
πŸ”„ Field modified: name
πŸ”„ Field modified: quantity
πŸ”„ Field modified: updatedAt
πŸ—οΈMandateResourceTypeπŸ”„ Modified
βž– Enum value removed: CARD_ON_FILE
βž• Enum value added: CREDENTIAL_ON_FILE
πŸ—οΈMediaImageπŸ”„ Modified
βž• Field added: translations

The published translations associated with the resource.

πŸ—οΈMetaobjectFieldDefinitionπŸ”„ Modified
βž• Field added: capabilities

Capabilities available for this metaobject field definition.

πŸ—οΈPaymentTermsπŸ”„ Modified
βž• Field added: canPayEarly

Whether the payment can be made before the due date. When true, allows early payment of the invoice. When false, the payment must be made according to the payment schedule.

πŸ—οΈPublicationπŸ”„ Modified
πŸ”„ Field modified: collectionPublicationsV3
πŸ—οΈResourcePublicationπŸ”„ Modified
πŸ”„ Field modified: publicationStatusOnChannel
πŸ—οΈResourcePublicationV2πŸ”„ Modified
πŸ”„ Field modified: publicationStatusOnChannel