/ WordPress Webhook Plugin — Event Delivery Infrastructure

Reliable webhook delivery
from any WordPress action

Treat WordPress as a first-class event source for automation. Deliver structured, durable, and observable webhook events to n8n, Make, Zapier, or any API — with retries, unique event identity, and full delivery logging built in.

WordPress webhook event delivery log showing failed attempts, automatic retry, and successful delivery Webhook Event Log
Every webhook event has a delivery log with retries and replay support.

Production-grade webhook delivery for WordPress · WordPress 6.0+ · PHP 8.0+ · Free & Open Source (GPL)
⭐ If this helps you automate reliably, please leave a review on WordPress.org.

/ The problem

WordPress automation often fails silently in production

The real problem isn’t just “sending a webhook.” It’s missing **event durability**, **retry guarantees**, and a **feedback loop into WordPress** when deliveries fail.

/ The solution

A production-ready event delivery layer for WordPress

Instead of fragile point-to-point integrations, treat WordPress as a resilient event source that can power automation workflows with confidence.

/ Features

Infrastructure-grade features for reliable automation

// event_identity

Event Identity

Each event gets a UUID and timestamp for traceability, idempotency, and reliable auditing in external systems.

// rest_api

REST API

Full operational REST API for delivery logs, retry triggers, queue status, and webhook management — usable by CI/CD pipelines, external dashboards, and AI agents.

// async_queue

Async Queue

Events are stored and processed independently of request cycles — enabling durable delivery and faster front-end response times.

// retry_logic

Smart Retry Logic

Exponential backoff and classification of permanent vs retryable failures reduce data loss and increase success rates.

// delivery_logs

Delivery Logs

Track every attempt with HTTP status codes, response bodies, and automated audit trails — not guesswork.

// payload_mapping

Payload Mapping

Transform structured JSON before dispatch so it matches the schema expected by your automation platform or API.

// extensibility

Developer Extensibility

Filters and actions allow you to adjust dispatch logic, headers, timeouts, and error handling for production needs.

/ Preview

See it in action

Payload Mapping — field mapping with live JSON preview
Payload Mapping — field mapping with live JSON preview
Trigger Selection — categorized hook dropdown
Trigger Selection — categorized hook dropdown
Dashboard showing stored WP webhooks payloads with an option to replay successful or failed webhook events.
Dashboard showing stored WP webhooks payloads with an option to replay successful or failed webhook events.
Queue Overview — stats, pending jobs, process now
Queue Overview — stats, pending jobs, process now
/ How it works

Three steps to resilient event delivery

01

WordPress fires an event

Any native or custom do_action — from user registration to WooCommerce order completion.

02

Event is captured and queued

Structured JSON payloads are built and stored for durable processing — outside the request lifecycle.

03

Reliable delivery to your endpoint

The event is dispatched asynchronously, retried automatically on failures, and logged for observability.

Example: WordPress fires user_register
// WordPress core fires this action when a new user registers do_action( 'user_register', $user_id ); // The plugin automatically captures it and sends a webhook: { "hook": "user_register", "args": [ 42 ], "timestamp": 1736934600, "site_url": "https://example.com", "user": { "ID": 42, "user_email": "jane@example.com", "display_name": "Jane Smith", "roles": [ "subscriber" ] } }

No listener code. No custom integration. Configure the hook in the admin panel — the plugin handles the rest.

/ Use cases

Real-world automation workflows

WooCommerce → ERP

Sync orders to your ERP

Send WooCommerce order data to your ERP system on every new order, status change, or refund.

WordPress → CRM

Sync users to your CRM

Automatically push new user registrations and profile updates to HubSpot, Salesforce, or any CRM via webhook.

Post Publish → Automation

Trigger workflows on publish

Notify Slack, update a spreadsheet, or trigger an n8n workflow every time a post or custom post type is published.

Custom Hook → n8n

Connect custom plugin events

Fire webhooks from any custom do_action in your theme or plugin — membership events, form submissions, anything. See the Contact Form 7 to webhook example for a full walkthrough.

WordPress → Microservices

Feed internal systems

Push WordPress events to internal APIs, message queues, or microservices for processing outside the WordPress stack.

REST API → AI Agent

AI-driven automation

AI agents and CI/CD pipelines inspect delivery logs, retry failed events, and manage webhook configuration programmatically via scoped API tokens — no admin session required.

Browse all integration examples →

/ Integrations

Works with any webhook-compatible system

n8n

Workflow Automation

Zapier

App Integration

Make

Visual Automation

Custom APIs

Any HTTP Endpoint

Any system that accepts HTTP POST requests with JSON payloads works out of the box. Configure the URL, add an optional authorization header, and you're connected.

/ Technical details

Built for reliability and performance

Non-Blocking HTTP

Webhook requests are dispatched outside the main request lifecycle. User-facing pages are never slowed down by outbound HTTP calls. For a deeper technical explanation of non-blocking architecture, see Async Webhooks Without Blocking in WordPress, and for why most webhook implementations silently fail in production, see Why WordPress Webhooks Silently Fail in Production.

Custom Queue Engine

Jobs are queued in a custom database table and processed in batches. Designed for system cron or a token‑protected REST endpoint for reliable, high‑frequency processing — with WP‑Cron as a fallback. For a deeper look at why WP‑Cron isn’t reliable for background jobs and how async webhook queues improve reliability and scalability in WordPress, see our technical article: Async Webhooks in WordPress — Why WP‑Cron Is Not Enough. To set up a proper cron job for WordPress — including system crontab, WP-CLI, and Action Scheduler — see Cron Job for WordPress: WP-Cron Limits and Real Fixes.

Exponential Backoff

Failed deliveries retry with increasing delays: 1 min, 2 min, 4 min, 8 min — up to 1 hour. Default 5 attempts, configurable via filter. For a full walkthrough of retry and replay architecture, see Inside My Webhook Retry & Replay System.

JSON Schema

Payloads follow a consistent structure: hook name, arguments, timestamp, site URL. Field mapping lets you reshape data for any external schema.

WordPress-Native

Built on WordPress APIs — wp_remote_post for HTTP, dedicated custom tables for fast storage and queries. Developer-friendly with filters and actions to customize every aspect. No external dependencies.

Filter-Based Extensibility

10 filters and 2 actions let you customize every aspect: dispatch conditions, payload transformation, headers, timeouts, and error handling.

/ Developer API

Full control via filters, actions, and REST API

fswa_should_dispatch fswa_payload fswa_normalize_object fswa_headers fswa_require_https fswa_max_attempts fswa_queue_batch_size fswa_http_timeout fswa_http_connect_timeout fswa_http_args fswa_available_triggers
fswa_success fswa_error
Example: conditionally skip dispatch
add_filter( 'fswa_should_dispatch', function( $should, $hook, $args ) { // Skip dispatch for admin users if ( $hook === 'wp_login' && user_can( $args[1], 'manage_options' ) ) { return false; } return $should; }, 10, 3 );
Example: normalize a CF7 form object for the webhook payload

Some plugins pass objects with private properties — or require additional PHP calls — to produce the data you actually want in the payload. fswa_normalize_object lets you intercept any such object before serialization and return a plain array instead. A common case is Contact Form 7, which fires wpcf7_mail_sent with a WPCF7_ContactForm instance whose submission data is only accessible via a separate API call.

add_filter( 'fswa_normalize_object', function( $data, $object ) { if ( !$object instanceof WPCF7_ContactForm ) { return $data; } $submission = WPCF7_Submission::get_instance(); return [ 'id' => $object->id(), 'title' => $object->title(), 'fields' => $submission ? $submission->get_posted_data() : [], ]; }, 10, 2 );

The filter fires per object in the hook arguments. Return the original $data for any object you don't need to handle — the plugin's default serializer takes over. See the CF7 to webhook example for the full integration walkthrough.

The plugin exposes a full operational REST API (/wp-json/fswa/v1/) that powers the admin interface and can also be used directly by external tools, automation systems, AI agents, and CI/CD pipelines. Endpoints cover delivery logs, event inspection, retry and replay triggers, queue status, webhook configuration, and API token management. Secured with scoped tokens (read, operational, full) passed as X-FSWA-Token, Authorization: Bearer, or a query parameter. See the full REST API reference, the REST API guide for monitoring, recovery, and CI/CD usage patterns, or Create and Manage WordPress Webhooks Programmatically for the control layer — creating, updating, listing, and deleting webhooks via API without touching wp-admin.

Because the API exposes operational endpoints for logs, queue jobs, webhooks, and triggers, external agents can treat WordPress as programmable event infrastructure — without requiring an admin session.

Monitor delivery health Retry failed events automatically Inspect logs to debug integrations Enable / disable webhooks during deployments Query queue metrics for alerting

Example: a Claude Code agent analyzes delivery logs and retries failed integrations. A CI/CD pipeline disables webhook triggers before a deployment and re-enables them after. An external dashboard polls queue health metrics via API token.

Requirements: WordPress 6.0+ · PHP 8.0+ · Tested up to WordPress 6.9
/ Frequently Asked Questions

Common questions answered

WP webhooks (WordPress webhooks) are HTTP POST requests sent automatically by WordPress when specific events occur — like a new order, a user registration, or a post being published.

This plugin adds production-grade WP webhook delivery to WordPress with async queuing, automatic retries, payload mapping, and full delivery logging — so every event reaches your automation platform reliably.
A WordPress action is a hook that runs at a specific moment during WordPress execution. For example: when a user registers, a post is updated, an order is completed, or a product is created.

This plugin allows you to trigger HTTP webhooks whenever those actions occur.
Yes. The plugin is fully compatible with n8n Webhook Trigger nodes.

Simply create a webhook in n8n, copy the URL, and paste it into the plugin. Structured JSON payloads are sent automatically when the selected WordPress or WooCommerce action fires.
Yes. You can connect it to Zapier, Make, Pipedream, or any system that supports incoming HTTP webhooks.

No vendor lock-in. No proprietary API.
Yes. Any WooCommerce action can be used as a trigger, including:
  • woocommerce_order_status_completed
  • woocommerce_new_order
  • woocommerce_product_set_stock
  • and many more
As long as the hook exists, it can trigger a webhook.
If a webhook request fails (for example, due to a temporary network issue or a 500 error), the plugin automatically retries using exponential backoff.

Example retry schedule:
1 minute → 2 minutes → 4 minutes → 8 minutes → up to 1 hour.

By default, 5 attempts are made before marking the webhook as permanently failed. Developers can modify this behavior using filters.
Yes. Every webhook delivery is logged with its payload and attempt history.
You can replay any event directly from the logs, which is useful for debugging integrations or re-running automation workflows.
Payload Mapping allows you to transform the outgoing JSON payload. You can:
  • rename fields
  • restructure nested data
  • remove sensitive values
  • normalize payloads for external APIs
The plugin can store sample payloads to make mapping easier.
Yes. For user-related actions (user_register, profile_update, wp_login, wp_logout), you can enable "Include User Data".

This automatically attaches structured user information such as:
  • user ID
  • email
  • display name
  • roles
  • registration date
Yes. Webhook requests are sent via HTTP POST using structured JSON. You can secure endpoints using authentication methods supported by your automation platform (for example, secret keys or signature validation).
Yes. The plugin is fully open-source and licensed under GPL. You are free to use, modify, and extend it.
"Solid plugin. Super easy to set up and it just works. If you need reliable webhooks this makes the whole process a lot easier."
Axel — WordPress.org review

Treat WordPress as a dependable event source

Install Flow Systems Webhook Actions and make event delivery in WordPress deterministic, retry-safe, and observable.