detektu
Shopify API changes
Potentially breaking

SDK release 15.0.0

sdk:npm/@shopify/shopify-api@15.0.0
Product
Shopify Admin GraphQL API
Source
GitHub Releases
Change kind
Sdk Release
Detected
Last updated

Deterministic evidence

Before / after

Extracted from Shopify's published contract. Open the source ↗

−1+131 change

1 / 1
null
{
"classification": "major",
"content_hash": "9953c23dfc8871a55c097a5c2f7e42487c8b9ce1c5826dcf78152ce4131313b8",
"coordinate": "sdk:npm/@shopify/shopify-api@15.0.0",
"deprecated": false,
"identity": "@shopify/shopify-api@15.0.0",
"link": "https://github.com/Shopify/shopify-app-js/releases/tag/%40shopify/shopify-api%4015.0.0",
"notes": "@shopify/shopify-api@15.0.0\n### Major Changes\n\n- d641a62: Remove `eventId` and `resourceId` from events webhooks\n\n Shopify is dropping the `shopify-event-id` and `shopify-resource-id` headers from events deliveries, so the libraries no longer read them. Both fields are gone from the public types, which makes this a breaking change.\n\n Webhooks are unaffected. They keep the `X-Shopify-Event-Id` header and the `eventId` field.\n\n ## Migration Guide\n\n Stop reading `eventId` and `resourceId` on events deliveries. Neither field has a direct equivalent: `eventId` identified the event behind a delivery, and `resourceId` carried the root resource's GID, which you can read from the payload instead.\n\n To deduplicate events deliveries, use `webhookId`. It comes from the `shopify-webhook-id` header, which Shopify still sends, and it is unique per delivery.\n\n ### For @shopify/shopify-app-remix and @shopify/shopify-app-react-router\n\n **Before:**\n\n ```typescript\n export const action = async ({request}: ActionFunctionArgs) => {\n const {webhookType, eventId, resourceId} =\n await authenticate.webhook(request);\n\n if (webhookType === 'events') {\n console.log(`Event ${eventId} for resource ${resourceId}`);\n }\n\n return new Response();\n };\n ```\n\n **After:**\n\n ```typescript\n export const action = async ({request}: ActionFunctionArgs) => {\n const {webhookType, payload} = await authenticate.webhook(request);\n\n if (webhookType === 'events') {\n // eventId and resourceId are no longer set on events deliveries.\n // The root resource's GID is in the payload.\n console.log(payload);\n }\n\n return new Response();\n };\n ```",
"published_at": "2026-09-17T14:50:21Z",
"registry_message": "",
"version": "15.0.0",
"yanked": false
}

Interpreted documentation change

What the vendor announced

The evidence describes a major breaking change in @shopify/shopify-api@15.0.0: the headers eventId and resourceId are removed from events deliveries, with guidance to use webhookId and to read the root resource's GID from the payload. This is a vendor-initiated API/library change with migration instructions. No explicit replacement endpoint is provided, and there is no explicit hard deadline stated. The change is primarily informational for developers to migrate.

@shopify/shopify-api@15.0.0 ### Major Changes - d641a62: Remove `eventId` and `resourceId` from events webhooks Shopify is dropping the `shopify-event-id` and `shopify-resource-id` headers from events deliveries, so the libraries no longer read them. Both fields are gone from the public types, which makes this a breaking change. Webhooks are unaffected. They keep the `X-Shopify-Event-Id` header and the `eventId` field. ## Migration Guide Stop reading `eventId` and `resourceId` on events deliveries. Neither field has a direct equivalent: `eventId` identified the event behind a delivery, and `resourceId` carried the root resource's GID, which you can read from the payload instead. To deduplicate events deliveries, use `webhookId`. It comes from the `shopify-webhook-id` header, which Shopify still sends, and it is unique per delivery. ### For @shopify/shopify-app-remix and @shopify/shopify-app-react-router **Before:** ```typescript export const action = async ({request}: ActionFunctionArgs) => { const {webhookType, eventId, resourceId} = await authenticate.webhook(request); if (webhookType === 'events') { console.log(`Event ${eventId} for resource ${resourceId}`); } return new Response(); }; ``` **After:** ```typescript export const action = async ({request}: ActionFunctionArgs) => { const {webhookType, payload} = await authenticate.webhook(request); if (webhookType === 'events') { // eventId and resourceId are no longer set on events deliveries. // The root resource's GID is in the payload. console.log(payload); } return new Response(); }; ```

Vendor source ↗

Monitored for you

Does this change affect your integration?

Choose the operations and fields your services use. Detektu matches Shopify findings to that declared usage so your team can review the relevant evidence. No agent or repository access required.

Multi-source correlation

Other Shopify findings correlated with this change across sources.

  1. Info
    Removing marketCurrencySettingsUpdate mutationdoc:019fb619-9b4a-74ac-a83e-3ffa98844fb4::feed/https://shopify.dev/changelog/removing-marketcurrencysettingsupdate-mutation
    Shopify Admin GraphQL API
  2. Info
    Setting includeRestOfWorld to true returns an error in API version 2027-01doc:019fb619-9b4a-74ac-a83e-3ffa98844fb4::feed/https://shopify.dev/changelog/setting-includerestofworld-to-true-returns-an-error-in-api-version-2027-01
    Shopify Admin GraphQL API
  3. Info
    Polaris CDN 1.1 is now stabledoc:019fb619-9b4a-74ac-a83e-3ffa98844fb4::feed/https://shopify.dev/changelog/polaris-cdn-1-1-is-now-stable
    Shopify Admin GraphQL API
  4. Info
    Events subscription query complexity limit is changing to 100 pointsdoc:019fb619-9b4a-74ac-a83e-3ffa98844fb4::feed/https://shopify.dev/changelog/events-subscription-query-complexity-limit-is-changing-to-100-points
    Shopify Admin GraphQL API
  5. Info
    Unlimited private plans and target stores in Shopify App Pricingdoc:019fb619-9b4a-74ac-a83e-3ffa98844fb4::feed/https://shopify.dev/changelog/unlimited-private-plans-and-target-stores-in-shopify-app-pricing
    Shopify Admin GraphQL API
  6. Info
    New translatable boolean field for Metafield GraphQL Objectdoc:019fb619-9b4a-74ac-a83e-3ffa98844fb4::feed/https://shopify.dev/changelog/is-translatable-metafield-field
    Shopify Admin GraphQL API
  7. Info
    Password Protected Shop Dev flows on Shopify Theme CLI v3.83.x and older to be deprecateddoc:019fb619-9b4a-74ac-a83e-3ffa98844fb4::feed/https://shopify.dev/changelog/password-protected-shop-dev-flows-on-shopify-theme-cli-v3-83-x-and-older-to-be-deprecated
    Shopify Admin GraphQL API
  8. Info
    The `automaticDiscounts` query is removed in API version 2027-01doc:019fb619-9b4a-74ac-a83e-3ffa98844fb4::feed/https://shopify.dev/changelog/automaticdiscounts-query-is-removed-in-api-version-2027-01
    Shopify Admin GraphQL API
  9. Info
    Request a bundle size exception for existing UI extensionsdoc:019fb619-9b4a-74ac-a83e-3ffa98844fb4::feed/https://shopify.dev/changelog/request-a-bundle-size-exception-for-existing-ui-extensions
    Shopify Admin GraphQL API
  10. Info
    Removed session.currentSession.staffMemberId from POS UI Extensions (2026-10)doc:019fb619-9b4a-74ac-a83e-3ffa98844fb4::feed/https://shopify.dev/changelog/removed-session-currentsession-staffmemberid-from-pos-ui-extensions-2026-10
    Shopify Admin GraphQL API
  11. Info
    New Pricing audit trail for contextual product variant pricesdoc:019fb619-9b4a-74ac-a83e-3ffa98844fb4::feed/https://shopify.dev/changelog/pricing-audit-trail-for-contextual-product-variant-prices
    Shopify Admin GraphQL API
  12. Info
    Query market hierarchies with the GraphQL Admin APIdoc:019fb619-9b4a-74ac-a83e-3ffa98844fb4::feed/https://shopify.dev/changelog/market-relationships
    Shopify Admin GraphQL API
  13. Info
    Adding a canceled receive action to the inventory shipments APIdoc:019fb619-9b4a-74ac-a83e-3ffa98844fb4::feed/https://shopify.dev/changelog/adding-a-canceled-receive-action-to-the-inventory-shipments-api
    Shopify Admin GraphQL API
  14. Info
    Updates to Events payloads and subscription configurationdoc:019fb619-9b4a-74ac-a83e-3ffa98844fb4::feed/https://shopify.dev/changelog/updates-to-events-payloads-and-subscription-configuration
    Shopify Admin GraphQL API
  15. Info
    Dynamic complexity cost for `metafieldsSet` mutationdoc:019fb619-9b4a-74ac-a83e-3ffa98844fb4::feed/https://shopify.dev/changelog/dynamic-complexity-cost-for-metafieldsset-mutation
    Shopify Admin GraphQL API
  16. Info
    Filter Catalog search results by media typedoc:019fb619-9b4a-74ac-a83e-3ffa98844fb4::feed/https://shopify.dev/changelog/filter-catalog-search-results-by-media-type
    Shopify Admin GraphQL API
  17. Info
    Prepare your app for the Shopify admin's new lookdoc:019fb619-9b4a-74ac-a83e-3ffa98844fb4::feed/https://shopify.dev/changelog/prepare-your-app-for-the-shopify-admins-new-look
    Shopify Admin GraphQL API
  18. Info
    family_name is optional for B2B orders in Payments Apps API requestsdoc:019fb619-9b4a-74ac-a83e-3ffa98844fb4::feed/https://shopify.dev/changelog/family_name-is-optional-for-b2b-orders-in-payments-apps-api-requests
    Shopify Admin GraphQL API
  19. Info
    Delivery options in Shopify Functions input now expose their metafieldsdoc:019fb619-9b4a-74ac-a83e-3ffa98844fb4::feed/https://shopify.dev/changelog/delivery-options-in-shopify-functions-input-now-expose-their-metafields
    Shopify Admin GraphQL API
  20. Info
    New paymentInstrumentSendAddEmail mutation emails customers a link to add a payment method for a subscription, order, or draft orderdoc:019fb619-9b4a-74ac-a83e-3ffa98844fb4::feed/https://shopify.dev/changelog/new-paymentinstrumentsendaddemail-mutation
    Shopify Admin GraphQL API
  21. Info
    Discounts Allocator Function API developer preview has endeddoc:019fb619-9b4a-74ac-a83e-3ffa98844fb4::feed/https://shopify.dev/changelog/discounts-allocator-function-api-developer-preview-has-ended
    Shopify Admin GraphQL API