2025-04: Release notes
The 2025-04 release focuses on merchandising, returns, extension capabilities, GraphQL Admin API changes, and Customer Account API changes.
Several changes in this version require code updates, especially around draft order access, products and collections, and Customer Account API changes. Review and adjust affected integrations before adopting 2025-04.
2025-04 is no longer supported. Requests for this version fall forward to the oldest accessible stable version:
Anchor to GraphQL Admin APIGraph QL Admin API
GraphQL Admin API updates include catalogs, customers, online store data, orders, payments, markets, fulfillment, and deprecation changes.
Anchor to AppsApps
Apps updates add finance KYC access.
Shopify-approved finance apps can retrieve shop finance KYC details with FinanceKycInformation on behalf of an approved StaffMember, and subscribe to FINANCE_APP_STAFF_MEMBER_DELETE, FINANCE_APP_STAFF_MEMBER_GRANT, FINANCE_APP_STAFF_MEMBER_REVOKE, FINANCE_APP_STAFF_MEMBER_UPDATE, and FINANCE_KYC_INFORMATION_UPDATE webhooks.
Anchor to Store propertiesStore properties
Store property updates add privacy settings management.
The GraphQL Admin API now supports managing shop privacy settings with PrivacySettings, including status and enablement for cookie banners, data sale opt-out pages, and privacy policy automation, plus regional controls for cookie consent and data sale opt-outs.
Anchor to BillingBilling
Billing updates add app subscription plan handles and subscription contract sorting.
The subscriptionContracts query now supports sorting results by the created_at, updated_at, and status filters in the GraphQL Admin API and Customer Account API. Use these filters to organize contracts by creation time, update time, or current status.
Managed pricing app subscription plans now expose persistent handles for querying plan data consistently after plan IDs change. Use AppRecurringPricing.planHandle in the GraphQL Admin API and plan_handle in the app_subscriptions/update webhook payload.
Anchor to CartCart
Deprecated Checkout APIs shut down on April 1, 2025.
The deprecated Checkout APIs, including Storefront Checkout Mutations and REST Checkout Endpoints, shut down on April 1, 2025. Update impacted apps to the Storefront Cart API; mobile apps can also adopt Checkout Sheet Kit.
Mar 2, 2025Anchor to CustomersCustomers
Customer updates add payment method revocation reasons, default email data, RFM groups, address mutations, and marketing consent source locations.
CustomerPaymentMethodRevocationReason includes new values for additional revocation cases: CUSTOMER_REDACTED, TOO_MANY_CONSECUTIVE_FAILURES, and CVV_ATTEMPTS_LIMIT_EXCEEDED.
The Customer object now includes defaultEmailAddress, which lets apps query a customer’s email address and marketing state.
The GraphQL Admin API now exposes a customer’s RFM (Recency, Frequency, Monetary) group through Customer.statistics.rfmGroup. Use rfmGroup to view customer engagement and purchasing patterns for segmentation and targeted marketing workflows.
The GraphQL Admin API adds customerAddressCreate, customerAddressUpdate, and customerAddressDelete mutations for managing customer addresses. Use the setAsDefault argument on create and update mutations to set an address as the customer’s default.
Now exposes the retail location where a customer’s marketing consent state was last updated, when applicable, through CustomerEmailMarketingConsentState.sourceLocation and CustomerSmsMarketingConsentState.sourceLocation.
Anchor to Discounts and marketingDiscounts and marketing
Discount search adds filters for end, creation, and update times.
discountNodes query now supports ends_at, created_at, and updated_at filters, so apps can find discounts by ending, creation, or last-updated time ranges.
Anchor to GraphQL typesGraph QL types
GraphQL type updates add a subscription billing attempt error code and remove redundant RELEVANCE sort options.
The SubscriptionBillingAttemptErrorCode enum now includes NON_TEST_ORDER_LIMIT_REACHED, returned when a subscription billing attempt reaches the order limit for the payment processor. Use a test payment gateway to place another order.
RELEVANCE is no longer included by default in connection sort options where it only duplicated basic ID sorting; cases where RELEVANCE provides unique capabilities and handles regular traffic are unchanged.
Anchor to MetafieldsMetafields
Custom identifiers can now look up more resource types.
Use custom identifiers to look up additional resource types with collectionByIdentifier, locationByIdentifier, orderByIdentifier, and productVariantByIdentifier. Custom IDs are defined with the new id metafield type, where unique values are required and enabled by default.
Anchor to Online storeOnline store
Online store updates add content filters, theme file metadata, theme roles, and article author data.
articles, pages, and comments queries have full filter parity with the REST Admin API. Filter articles by blog_id, handle, and published_at; pages by published_status, published_at, and id; and comments by created_at, updated_at, and published_at.
themeFilesUpsert now returns theme file metadata in the GraphQL Admin API response body for successful mutations. Use OnlineStoreThemeFileOperationResult to verify file updates without making additional fetch requests.
The themeCreate mutation now accepts an optional role argument to set the role for a newly created theme. Only UNPUBLISHED and DEVELOPMENT are permitted for new themes.
The articleAuthors query lets apps fetch a store’s list of article authors through the GraphQL Admin API.
Anchor to OrdersOrders
Order updates deprecate CalculatedOrder for committed edits and add partial payment recording.
Update apps that use CalculatedOrder for committed order edits: use Order to access the current state after edits are committed, and Order.agreements to query past changes. CalculatedOrder.committed is also deprecated; uncommitted order edits are unchanged.
Use the new orderCreateManualPayment mutation to record partial payments on orders. Multiple separate payments can be recorded, up to the total amount owing on the order.
Anchor to Products and collectionsProducts and collections
Products and collections updates add catalog changes, product and customer upserts, gift card limits, order line item weights, fulfillment rejection reasons, product sync IDs, harmonized system code validation, and clearer deprecation headers.
Markets integrations also need updates for backup regions, nullable currency settings, web presences, and contextual pricing.
Unused PriceListErrorCode values that are not returned by the API are hidden. Remove any references to CATALOG_ASSIGNMENT_NOT_ALLOWED, CATALOG_CANNOT_CHANGE_CONTEXT_TYPE, APP_CATALOG_PRICE_LIST_ASSIGNMENT, and CONTEXT_RULE_MARKET_LOCKED.
Catalog APIs now support multiple markets on one catalog, so MarketCatalog.markets no longer guarantees a single entry. To keep existing region-only behavior, update markets queries to pass type: REGION.
Update Markets integrations to use backupRegionUpdate with BackupRegionUpdateInput, handle nullable Market.currencySettings, and replace deprecated MarketWebPresence.market with MarketWebPresence.markets.
The combinedListingUpdate mutation returns the new option_name_contains_invalid_characters error when an option name includes invalid character sequences, such as /, providing clearer feedback for invalid input.
FulfillmentOrderRejectionReason includes new rejection reasons for international shipping setup, incorrect product info, invalid contact information or SKUs, merchant blocks, missing customs info, oversized orders, missing package preferences, and declined payments.
productSet and customerSet now support idempotent upserts by identifier, updating an existing record when matched or creating one otherwise. Supported identifiers are handle, id, and customId for productSet, and phone, email, and customId for customerSet.
Use the giftCardConfiguration query to retrieve maximum gift card values, with separate limits available for purchased gift cards and issued gift cards.
The X-Shopify-API-Deprecated-Reason HTTP header now returns the specific detected GraphQL deprecations, such as Shop.products or Shop.productVariants, instead of a generic deprecation practices URL.
Product Variant mutations now validate country-specific harmonized system codes against existing codes on the InventoryItem.
The GraphQL Admin API now includes the id return field in ProductFullSyncPayload, so apps can track product full sync payloads directly.
The orderCreate mutation now supports the optional OrderCreateLineItemInput.weight field using WeightInput to set line item weights. For variant-backed items, specified weights override variant defaults; custom items default to 0 when no weight is provided.
Anchor to RetailRetail
Exchange queries can now include mirrored exchanges.
The Retail ExchangeV2 query now supports the include_mirrored_exchanges filter to include or exclude exchanges mirrored from the Shopify admin.
Anchor to Shipping and fulfillmentShipping and fulfillment
Fulfillment service mutations add requiresShippingMethod.
Mutations fulfillmentServiceCreate and fulfillmentServiceUpdate now support the requiresShippingMethod field, aligning fulfillment service configuration with the REST Admin API equivalents.
Anchor to Shopify PaymentsShopify Payments
Shopify Payments updates add card brand values, balance transaction amounts, and merged payout statuses.
OrderTransactions.paymentMethods includes two new enum values, CARTES_BANCAIRES and BANCONTACT. Order transactions paid with these methods return the corresponding values in GraphQL Admin API responses.
Shopify Payments payout statuses In Transit and Scheduled are now merged into Scheduled in dashboards and API responses. If your workflows or integrations use In Transit, update them to recognize Scheduled instead.
Balance transaction adjustment orders now expose fee and net amount data for reconciliation. Use fees and net under ShopifyPaymentsBalanceTransaction.adjustmentsOrders in the GraphQL Admin API, or fee and net under adjustment_order_transactions on the REST Admin API Transactions resource.
Anchor to Customer Account APICustomer Account API
Customer Account API updates include store credit metadata, reserved namespace protections, order fulfillment status, and contextual translations.
Anchor to Store creditStore credit
Store credit transactions add event and origin metadata.
Store credit transactions in the Customer Account API now include event and origin fields to identify what triggered a transaction and its source, including references to an originating OrderTransaction when applicable. OrderTransaction also now exposes order.
Anchor to MerchandisingMerchandising
Metafield namespaces and metaobject types add reserved-prefix protections.
New metafield namespaces and metaobject types can’t include --, including values such as foo-- or foo--bar. Existing metafield and metaobject definitions continue to work, reserving the format for platform-defined identifiers like shopify--{standard} and app--{your-app-id}.
Anchor to OrdersOrders
Customer Account API adds order fulfillment status.
Adds fulfillmentStatus to the Order object, representing the order’s aggregated fulfillment status for display purposes.
Anchor to Store propertiesStore properties
Customer Account API adds contextual translations.
Supports the @inContext directive with a language argument to return translated values when the requested language is active for the given country. Unsupported language or country requests using @inContext fall back to the default language.
Anchor to Events & webhooksEvents & webhooks
Webhooks add checkout and accounts configuration tracking.
Anchor to OrderOrder
The checkout_and_accounts_configurations/update webhook fires when merchants update draft or published checkout and accounts configurations. Apps can monitor typ_osp_pages_enabled in the payload to detect Thank you and Order status page upgrades without polling APIs.
Anchor to Payments Apps APIPayments Apps API
Payments Apps API adds card-not-present processing details.
Payments apps can now provide card-not-present processing details on PaymentSessionPaymentDetails using cardNotPresent, including avsResultCode for AVS responses and cvvResultCode for CVV verification results.
Anchor to PolarisPolaris
Polaris updates include app-owned metafields, checkout attribute removal, and POS target support.
Anchor to AccessAccess
Checkout and customer account UI extensions add app-owned metafield access.
Checkout and customer account UI extensions can now read app-owned metafields through the appMetafield API. Request these metafields in shopify.extension.toml using the $app namespace format; writing to them isn’t supported.
Anchor to CheckoutCheckout
Checkout UI extensions add cart and checkout attribute removal.
Checkout UI extensions can now remove cart and checkout attributes by using AttributeRemoveChange. Pass the attribute key you want to remove when applying an attribute change during checkout.
POS UI extensions add developer-preview targets, receipt footer components, and QR codes.
POS UI extensions built on unsupported versions, or the April 2024 POS UI extension version stop functioning in POS 9.31. Update affected apps to the latest POS UI extension version.
POS UI extensions add developer-preview targets for transaction complete, cart updates, cash tracking session start and complete, and receipt footer rendering. Receipt footer extensions must use POSReceiptBlock as the parent component, and QRCode is now available.