TechCorner HQ · Technical Troubleshooting Guide

WooCommerce Webhooks Automatically Disabled After Delivery Failures: Causes and How to Fix It

By TechCorner HQ Editorial Desk Last reviewed Review standards

Quick Answer

WooCommerce automatically changes a webhook's status from Active to Disabled after more than five consecutive delivery failures. WooCommerce classifies a delivery attempt as failed if the receiving endpoint returns an HTTP response status code other than 2xx, 301, or 302, or if the connection times out. WooCommerce does not send an email alert when disabling a webhook, and it does not re-enable the webhook automatically once the endpoint recovers.

Illustration showing interrupted network node connections representing a failed webhook delivery process.

To fix a disabled webhook, review the logs under WooCommerce > Status > Logs (filtering by webhooks-delivery), resolve the underlying endpoint error or server availability issue, navigate to WooCommerce > Settings > Advanced > Webhooks, and change the status back to Active. Developers can also adjust the failure limit using the woocommerce_max_webhook_delivery_failures filter hook.

How WooCommerce Webhook Delivery Works

When a supported event occurs in your store (such as order creation, customer updates, or product modifications), WooCommerce generates a JSON payload and sends an HTTP POST request to your designated Delivery URL. Each payload includes a signature generated with your secret key and sent in the X-WC-Webhook-Signature header so the receiving system can verify the request's origin.

WooCommerce processes webhook deliveries asynchronously using Action Scheduler, a background processing queue integrated into WooCommerce core. Action Scheduler schedules tasks to dispatch webhook payloads without blocking the front-end user experience, relying on the site's background processing schedule to process the delivery queue.

Why WooCommerce Automatically Disables Webhooks

WooCommerce includes a safeguard mechanism to prevent continuous outbound HTTP requests to broken or missing endpoints. If a webhook exceeds the threshold of consecutive delivery failures, WooCommerce changes its internal status property from active to disabled.

1. Endpoint Server Errors and Downtime

If the receiving server or application is offline, in maintenance, or returning server-side errors (such as HTTP 500 Internal Server Error, 502 Bad Gateway, or 503 Service Unavailable), WooCommerce registers each request as a failed delivery. Accumulating repeated failures triggers automatic deactivation.

2. HTTP Client and Authentication Failures

If the destination URL path changes, authentication headers are rejected, or endpoint permissions are restricted, the destination server returns HTTP client error status codes (such as 401 Unauthorized, 403 Forbidden, or 404 Not Found). Unsuccessful status codes increment the failure counter.

3. Connection Timeouts

If the destination server takes too long to process and acknowledge the incoming POST payload, the HTTP request times out. Network delays or gateway timeouts, similar to a Cloudflare Error 524, cause WooCommerce to log the delivery as unsuccessful.

4. Queue Delays and Stalled Background Scheduling

By default, WordPress background tasks trigger when a user visits the store. On low-traffic sites, queued webhook jobs can accumulate during quiet periods. When traffic resumes, Action Scheduler dispatches queued tasks in batches. If the receiving endpoint cannot handle the sudden burst of requests and drops connections, consecutive delivery failures can quickly exceed the attempt limit. Stalled background processing can also cause storewide execution delays, similar to WooCommerce not sending emails.

How to Diagnose Webhook Failures

Follow these diagnostic steps within the WordPress dashboard to identify why a webhook failed before applying code changes.

Step 1: Check the Webhook Status

  1. In the WordPress admin dashboard, navigate to WooCommerce > Settings > Advanced > Webhooks.
  2. Locate the webhook in the list and inspect the Status column.
  3. If the status displays Disabled, WooCommerce changed the setting after reaching the consecutive failure limit.

Step 2: Inspect Webhook Delivery Logs

  1. Navigate to WooCommerce > Status > Logs.
  2. Select the log file starting with webhooks-delivery from the log drop-down menu and click View.
  3. Review the log entries to examine the request duration, destination URL, headers, HTTP response status code, and response body returned by the receiving server.
  4. Confirm whether the endpoint returned client errors (such as 404), server errors (such as 500), or failed due to a network connection timeout.

Step 3: Review Action Scheduler Status

  1. Navigate to WooCommerce > Status > Scheduled Actions.
  2. Search for tasks containing webhook or woocommerce_deliver_webhook_async.
  3. Inspect the Failed tab to check if background execution tasks failed internally before the HTTP request reached the external server.

Step-by-Step Solutions

Method 1: Fix Endpoint Errors and Reactivate the Webhook

WooCommerce does not re-enable a disabled webhook automatically. You must fix the issue on the destination server and manually set the webhook back to active.

  1. Verify that your external receiving URL is active, reachable, and configured to return an HTTP 200 OK (or 2xx) status response upon payload receipt.
  2. Navigate to WooCommerce > Settings > Advanced > Webhooks.
  3. Click the name of the disabled webhook to edit its settings.
  4. Change the Status drop-down menu from Disabled to Active.
  5. Click Save webhook.

Method 2: Adjust the Delivery Failure Threshold (Developers)

Warning: Always back up your site files and database, or test code in a staging environment, before modifying code files or adding custom hooks.

If the receiving server undergoes planned maintenance windows and requires higher failure tolerance, developers can adjust the failure threshold using the official woocommerce_max_webhook_delivery_failures filter hook.

Add the following code snippet to a custom site plugin or your active child theme's functions.php file:

add_filter( 'woocommerce_max_webhook_delivery_failures', 'custom_wc_max_webhook_failures' );
function custom_wc_max_webhook_failures( $failures ) {
    return 10; // Adjusts the failure limit threshold from the default to 10
}

How to Verify Webhook Operation

  1. Navigate to WooCommerce > Settings > Advanced > Webhooks and ensure the target webhook displays Active.
  2. Perform an action on your store that triggers the webhook's configured topic (such as updating an order or editing a product).
  3. Navigate to WooCommerce > Status > Logs and open the newest webhooks-delivery log file.
  4. Verify that the log entry records a successful HTTP response code (200 or 2xx) from the receiving server.
  5. Check the destination platform or application to confirm that the payload was received and processed correctly.

Sources & References