Hi everyone, how often are webhooks retry when they fail? And is it possible that if so many webhooks failed over time, some retries were lost?
Hey @Elia_Germanetto!
Shopify will retry up to 8 times over 4 hours using exponential backoff. So if you have a bunch of failures stacking up, you can definitely lose retries.
After 8 consecutive failures, the webhook subscription gets automatically deleted (if you created it via the Admin API). You’ll get warning emails before that happens, but once it’s gone, you won’t get any more webhooks until you recreate the subscription.
A webhook counts as failed if you don’t respond with a 200 within 5 seconds, or if you return anything outside the 200 range (even redirects).
Best approach is to respond immediately with a 200 OK, then queue the actual processing for later. That way you’re not at risk of timing out. Also worth setting up a reconciliation job that periodically fetches critical data via the API as a safety net.
You can check your webhook metrics in the Developer Dashboard (Apps → Your App → Logs) to catch issues before subscriptions get removed.
Let me know if you need anything else!
ok thanks a lot but I was referring to the shop’s webhook, for example the customer activation one
Just to clarify - are you asking about webhooks you’re receiving in an app you’re building, or about webhook notifications configured in the Shopify admin (Settings → Notifications → Webhooks)?
The retry policy is the same (8 times over 4 hours), but there are some important differences:
App webhooks:
- Visible in Developer Dashboard for monitoring
- You get warning emails before the subscription is deleted
- Can track metrics and delivery logs
Admin-configured webhooks (Settings → Notifications):
- NOT visible in Developer Dashboard
- NO warning emails before deletion
- Managed directly in store notification settings
For customer activation specifically - are you experiencing failures, or just trying to understand how retries work? If you’re having an issue, what symptoms are you seeing?
I have a customer activation webhook that calls one of my applications to tell it that a new customer has activated. However, yesterday my application crashed, so it couldn’t perform the actions it usually does for customers who activate when it receives webhook information because it wasn’t receiving it. So I wanted to understand how often these webhooks are executed when it’s retrying to try to recover the lost information.
Ah, thanks for clarifying! Shopify’s retry mechanism only kicks in when we don’t get a 200 OK response from your server.
If your app was accepting the webhook (sending 200) and then crashing during processing, those webhooks won’t be retried. From Shopify’s perspective, delivery succeeded. The retries are spread over 4 hours with exponential backoff, but they only happen for delivery failures, not processing failures.
For recovering the lost customer activations from yesterday, you’ll want to use a reconciliation approach. Query customers for recently activated customers and compare against what you’ve already processed, for example:
query GetRecentlyActivatedCustomers {
customers(first: 250, query: "state:ENABLED updated_at:>=2025-10-29") {
edges {
node {
id
firstName
lastName
defaultEmailAddress {
emailAddress
}
createdAt
updatedAt
state
}
}
pageInfo {
hasNextPage
endCursor
}
}
}
Adjust the updated_at date to cover your downtime window. The state:ENABLED filter catches activated accounts. You can use pagination if you have more than 250 customers activated during that period.
I hope this helps you in your app’s recovery - let me know if you have any other questions!
Could you please clarify, is the subscription removed for all webhooks made via the Admin API after 8 failed responses?
Our app subscribes to webhooks through the Admin API, and we use AWS Bridge as the delivery target. Recently, AWS was down, so our webhook endpoint was unavailable. Our app couldn’t do anything about that.
Does this mean that all our subscriptions were deleted? Or does this happen only for HTTP subscriptions?
Also, who gets the email notification about the deleted subscription – our app’s users or the app developers?
Hi @Yuri_K, thanks for waiting to hear back from me!
Yes, subscriptions created via the Admin API get automatically deleted after 8 consecutive failures, and this applies to all webhook types - HTTP, EventBridge, and Pub/Sub. It’s not specific to HTTP subscriptions.
So if AWS EventBridge was down and your endpoint couldn’t respond, your subscriptions would be deleted after 8 failed attempts over the 4-hour retry window.
On the email notifications, they go to your app’s “API contact email” - that’s the email address you used to create your Partner account, not your app users. You can check/update this in the Developer Dashboard under Apps > [Your App] > Settings > API contact email.
The automatic deletion only applies to subscriptions created via the Admin API (GraphQL mutations or REST endpoints). If you define webhooks in your shopify.app.toml file, those are managed differently by Shopify and won’t be automatically deleted.
Best practice for handling outages is to implement a reconciliation job that periodically fetches critical data via API as a backup, in case you miss webhooks during downtime.
*Edited to add links