
Webhook Watchdog for WooCommerce
WooCommerce disables a webhook after 5 failed deliveries and gives no warning. This plugin finds those webhooks, keeps an incident log, and sends a digest. Pro re-enables them after checking the endpoint.
- Compatibility
- WordPress 6.2+, WooCommerce 6.0+ (tested on WP 7.1 / Woo 10.7)
- PHP
- 7.4 or newer
- Licence
- one site, annual
- Trial
- 7 days, no card, one per site
The module in action — 41 sec
Clear even without sound: Ukrainian subtitles
What Free has,
and what Pro adds
The free version works with no time limit. Pro adds the rest of the features in the table.

The trial starts when you ask
A fresh install is the free version, nothing switches on by itself. The “Try Pro for 7 days” button → e-mail → the key right in the window and by e-mail.

One key — one site
Moving the store? Unbind the licence on the old domain and activate it on the new one yourself.
Technical requirements
WordPress 6.2+ (tested on 7.1).
WooCommerce 6.0+ (tested on 10.7).
PHP 7.4+.
Works with HPOS (custom order tables) and the block cart/checkout — compatibility explicitly declared.
Checking an endpoint requires outbound HTTP requests from the site (standard WP HTTP API).
Version history
Scheduled scan, incident log, email digest, manual scan, automatic restore with a prior endpoint probe, failure counter reset, flapping protection, retention.
Frequently bought with Webhook Watchdog for WooCommerce
4 modules in one order — 40% cheaper than separately


Nova Poshta Premium — Nova Poshta for WooCommerce

Mono Acquiring — monobank card payments for WooCommerce

Telegram notifications and Viber/SMS for customers for WooCommerce
Full module description
WooCommerce keeps a counter of failed deliveries on every webhook. After the fifth failure in a row, it sets the webhook’s status to disabled — and tells no one. No email, no admin notice, no record anywhere the store owner would normally look.
The story is always the same: the integration on the other end — Printful, a CRM, a warehouse, accounting — simply stops receiving orders, and the store finds out days later from a customer or an undelivered parcel. The webhooks screen says “Disabled”, with no explanation of when, why, or how many times this has already happened.
This module is that missing half.
What the buyer sees
Nothing — and that’s correct. The module adds nothing to the storefront, doesn’t touch the cart, checkout, or customer emails, and doesn’t slow down any store page. It only works in the admin and on a schedule.
What the admin gets
Scheduled webhook checks — every 15 minutes, hourly, twice a day, or once a day, your choice. Plus a “Scan now” button for when you need a check right away.
Incident log — a separate screen with its own table: when found, which webhook, topic, delivery URL, how many deliveries failed, what was done, and the endpoint’s response. Filters by result: notified only, restored, endpoint down, limit reached, failed.
The log answers a question neither WooCommerce nor the integration’s own panel answers: how long has this integration been failing, and how often.
Emails are one digest per scan, not one email per webhook. When an endpoint goes down, it takes all its webhooks with it at once, and twelve identical emails at 3 a.m. teach people to filter the sender rather than fix the endpoint.
How it works, step by step
- On schedule, the module asks WooCommerce which webhooks currently have status
disabled(optionally alsopaused). - An incident is logged for each one: topic, URL, failure count, previous status.
- In “notify only” mode, that’s the end of it — the store’s state doesn’t change, you just find out.
- In restore mode, the module first checks whether the endpoint responds at all: a plain HEAD request, falling back to GET if HEAD returns 405.
- If there’s no response, or a 5xx comes back, the webhook stays disabled, and the exact reason (down to the cURL error text) is logged and emailed.
- If the endpoint is alive, the webhook is switched back on, and the failure counter is reset along with the status.
- Incident records older than a configured period are deleted automatically.
The probe deliberately never replays the payload that failed to deliver. Resending a real order webhook to an endpoint whose state is unknown is exactly how a warehouse ends up shipping the same order twice. The probe only answers “is anyone listening at this address at all”, and that’s what decides whether it’s worth trying to re-enable.
Any HTTP response, including 4xx, counts as a sign of life: an endpoint that rejects a bare GET but accepts a signed POST is entirely normal, and it’s still proof the host is up.
Under the hood
A dedicated incidents table — one row for every time a webhook was found disabled, with what was done about it. That’s something neither WooCommerce nor the integration’s panel has: a history that shows recurrence.
Resetting failure_count on restore isn’t cosmetic. WooCommerce compares the current counter against the threshold, so a webhook re-enabled with a counter still sitting at five dies again on the very next failure. That’s the exact mistake people make when they re-enable a webhook by hand.
Flapping protection counts actual restores, not mentions: a webhook that’s been reported ten times hasn’t used up any of its quota. Without this limit, a webhook whose endpoint is broken in a way the probe can’t see would keep resurrecting forever — in batches of five real requests each time.
The scan is wrapped so that a failure inside it doesn’t take down the WordPress task queue: a watchdog that dies with a fatal error would take every other scheduled store task down with it.
The module doesn’t touch order tables and sends nothing anywhere except an email to your own address and a probe to the delivery URL you set in WooCommerce yourself.
Installation
- Plugins → Add New → Upload Plugin → zip → activate. WooCommerce must be active.
- Webhook Watchdog will appear in the admin menu.
- Leave it in “notify only” mode for a few days to see what’s actually happening in your store.
- Then decide whether to turn on automatic restoring.
Questions
about the module
Didn't find the answer? Message us on Telegram and we'll reply within a business day.
Why does my webhook get disabled in the first place?
WooCommerce increments a failure counter on every delivery without a 2xx, and after the fifth sets the status to "disabled". A short outage on the receiving end is enough.
Will it resend deliveries that were lost?
No. WooCommerce doesn't store the payload of failed deliveries, and inventing a replacement is worse than a gap.
Will it start re-enabling a webhook I disabled on purpose?
No. A manually set paused status is left alone by default — that's a separate switch.
How much load does it put on the site?
One indexed query plus one lightweight HTTP probe per broken webhook. When healthy, there are no probes at all.
What happens if I delete the plugin?
The log is only deleted on full deletion, not on deactivation.
No reviews yet. Be the first.
No questions yet. Ask one — we answer within 24 hours.
Not quite what you are looking for?
We build custom modules for WordPress, WooCommerce, OpenCart and Shopify. Tell us about the task and we'll prepare an estimate.
Order a custom module
Buying the module
—



