Flow Systems Webhook Actions
Flow Systems Webhook Actions
Description
Flow Systems Webhook Actions is a developer-focused WordPress webhook delivery layer designed for reliable automation workflows.
Trigger HTTP webhooks from any WordPress or WooCommerce action (do_action) and dispatch them asynchronously through a persistent queue with smart retries, event identity, and full delivery visibility.
Unlike basic “fire-and-forget” webhook implementations, this plugin ensures:
- Delivery attempts are tracked
- Failures are visible
- Retries are automatic and intelligent
- Events include stable identity metadata for idempotency
Built for production environments where losing events is not acceptable.
Typical Use Cases
- Send WooCommerce orders to n8n with retry protection
- Sync WordPress users to external CRMs safely
- Trigger backend microservices from WP hooks
- Send event-driven data to internal APIs
- Replace fragile custom
wp_remote_post()integrations - Build idempotent WordPress automation pipelines
Event Identity & Idempotency
Every dispatched webhook includes:
- Unique UUID (v4) per event
- ISO 8601 UTC timestamp
- Embedded
event.id,event.timestamp,event.versionin the payload - HTTP headers:
X-Event-Id,X-Event-Timestamp
This enables downstream deduplication, idempotent workflow design, and reliable debugging across systems.
Reliable Queue & Smart Retry
Webhooks are never sent directly from request execution. Instead:
- Events are stored in a persistent database queue
- Processed asynchronously via background jobs
- Dispatched in batches to avoid performance impact
Smart retry routing:
- 5xx and 429 responses automatic exponential backoff retry
- 4xx and 3xx responses immediately marked as
permanently_failed - Configurable maximum retry attempts
- Full attempt history stored per event
No silent failures.
Replay Webhook Events
Webhook debugging is difficult when events cannot be reproduced.
Flow Systems Webhook Actions allows you to replay any webhook event directly from the delivery logs — including successful deliveries.
This makes it easy to:
- Re-run automation workflows
- Debug external integrations
- Recover from temporary endpoint failures
- Test webhook consumers without recreating WordPress events
Each replay uses the original payload and event metadata, ensuring consistent behavior across retries and debugging sessions.
Delivery Observability
Operational visibility built into the admin panel:
Status states: pending, processing, success, failed (retrying), permanently_failed
- Attempt timeline per event
- HTTP status codes and response bodies
- Inspect full request payloads
- Manual retry (single or bulk)
- Replay webhook events for debugging and testing integrations
Filter by: event UUID, target URL, date range, status
Queue health metrics:
- Average attempts per event
- Oldest pending job age
- Queue stuck detection
- WP-Cron-only warning
Designed as an operations console — not just a webhook sender.
Payload Mapping
Adapt outgoing JSON payloads to match any external API:
- Rename fields using dot notation
- Restructure nested objects
- Exclude sensitive or unnecessary data
- Store example payloads for configuration
- Modify via
fswa_payloadfilter
Payloads always include stable event metadata for consistency.
Developer Friendly
- Works with any WordPress or WooCommerce action
- Internal REST endpoints power the admin interface
- Fully extensible via filters and actions
- Clean namespace and unique prefixes
- Built according to WordPress.org standards
- Supports system cron for improved reliability
Why Choose Flow Systems Webhook Actions?
Most WordPress webhook setups fire once, don’t retry intelligently, don’t provide delivery visibility, and don’t expose event identity.
Flow Systems Webhook Actions provides:
- Persistent queue
- Smart retry logic
- Webhook replay for debugging integrations
- Permanent failure state handling
- Event UUIDs and timestamps
- Full delivery logging and metrics
Built for developers who need production-grade automation reliability.
Available Filters
fswa_should_dispatch– Decide if a trigger should dispatchfswa_payload– Customize webhook payloadfswa_headers– Add custom HTTP headersfswa_require_https– Toggle HTTPS requirementfswa_max_attempts– Configure maximum retry attemptsfswa_queue_batch_size– Configure batch processing sizefswa_http_timeout– Configure HTTP request timeoutfswa_http_connect_timeout– Configure HTTP connect timeoutfswa_http_args– Customize HTTP request argumentsfswa_available_triggers– Customize available trigger list
Available Actions
fswa_success– Fired after successful webhook deliveryfswa_error– Fired after webhook delivery failure
Installation
- Upload the plugin files to the
/wp-content/plugins/flowsystems-webhook-actionsdirectory, or install the plugin through the WordPress plugins screen. - Activate the plugin through the ‘Plugins’ screen in WordPress.
- Navigate to Webhook Actions in the admin menu.
- Add your webhook endpoint URL and select the desired WordPress action triggers.
Screenshots
Faq
An action is a WordPress hook triggered at a specific moment, such as when a user is created, a post is saved, or an order is completed.
This plugin works seamlessly with n8n webhook triggers and can be used with any automation platform or external API that accepts HTTP webhooks.
Yes. Any WooCommerce action can be used as a trigger, as long as the hook is available.
Failed webhooks are automatically retried using exponential backoff. The delay increases with each attempt (e.g., 1 minute, 2 minutes, 4 minutes, 8 minutes), up to a maximum delay of 1 hour between retries. By default, 5 attempts are made before marking a job as failed. The retry behavior can be adjusted using available 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 webhook payload before it is sent. You can rename fields, reorganize the structure, or exclude sensitive data. The plugin can store example payloads to help configure mappings.
Yes. For user-related triggers (such as user_register, profile_update, wp_login, wp_logout), you can enable “Include User Data” to automatically add user information (ID, email, display name, roles, etc.) to the payload.
Yes. The plugin is completely free and licensed under GPL.
Reviews
Reliable webhook solution
By Axel (axeljankowski) on March 5, 2026
Solid plugin. Super easy to set up and it just works. If you need reliable webhooks this makes the whole process a lot easier.
Very nice Webhook Retry Logic
By Rafał (rafalwilinski) on February 19, 2026
Used it in WooCommerce project, async processing works well and retry logic saved us from silent webhook failures.
Changelog
1.2.1 — 2026-03-07
- Fixed retry returning 500 when a log has multiple queue jobs (replay + original) —
findByLogIdnow returns the most recent job viaORDER BY id DESC - Fixed
forceRetryrejecting jobs with statusfailed— restoredfailedto the allowed status list alongsidependingandpermanently_failed
1.2.0 — 2026-03-07
- Added persistent delivery stats table (
fswa_stats) for long-term aggregation - Added replay button for successful log entries
- Added “Execute Now” button in replay dialog with auto-open log details
- Added full attempt history with response body, accordion UI, and next attempt countdown
- Replaced browser
confirm()dialogs with modal confirmations - Fixed queue stats — removed stale
failedstatus, addedpermanently_failed - Fixed retry eligibility check to use log status instead of queue job status
- Fixed “Execute Now” button visibility to only show for pending jobs
1.1.1 — 2026-03-01
- Fixed
permanently_failedentries being excluded from total and error delivery statistics ingetStats(),getAllTimeStats(), andLogArchiver::aggregateStatsBeforeDeletion()
1.1.0 — 2026-02-28
- Added event identity: each trigger dispatch generates a shared UUID and timestamp sent as
X-Event-Id/X-Event-Timestampheaders and embedded in the payload underevent.{id,timestamp,version} - Added smart retry routing: 5xx and 429 responses trigger an automatic retry with exponential backoff; 4xx and 3xx responses are immediately marked as permanently failed
- Added
permanently_failedstatus for non-retryable delivery failures - Added attempt history: each delivery attempt is recorded as a JSON array on the log entry, visible in the admin timeline view
- Added per-log retry and bulk retry REST endpoints (
POST /logs/{id}/retry,POST /logs/bulk-retry) - Added
event_uuidandtarget_urlfilter parameters to logs and queue REST endpoints - Added date range filtering (
date_from,date_to) to logs and queue list views with a shadcn-style calendar date/time picker - Added health observability metrics: average attempts per event, oldest pending age, queue stuck detection, WP-Cron-only warning
- Added
queue.log_idcolumn linking queue jobs to their log entries - Updated admin UI: permanently failed badge, attempt timeline, per-row retry button, bulk retry, observability warning banners, new filter inputs
- Updated footer with a review prompt linking to WordPress.org
1.0.1 — 2026-02-18
- Fixed preview freezing when mapping fields from objects with numeric string keys (e.g. WooCommerce line_items)
- Fixed orphaned pending log entries caused by logPending() silently failing — queue jobs now carry mapping metadata and recover a proper log entry if the original ID was lost
- Enhanced normalizeValue to handle Closure, DateTimeInterface, and Traversable types
- Removed unnecessary WooCommerce hook patterns from trigger exclusions
- Improved log details display with word break for long trigger names and dates
1.0.0 — 2026-02-16
- Initial release
- Webhook dispatching from WordPress actions
- Background processing with retry mechanism
- Configurable webhook payloads
- Logging of webhook deliveries






