Integrations
WordPress Plugin

WordPress Plugin

The FlowAlert plugin connects your WordPress site to FlowAlert — no custom code required. It covers six families of integration:

  • WordPress itself — fatal errors (recovery mode), failed auto-updates, administrator logins, plugin & theme changes, new user registrations. No third-party plugin needed.
  • Site heartbeat — the plugin checks in with FlowAlert every 10 minutes; if your site goes silent, FlowAlert pages whoever is on call.
  • Forms — Contact Form 7, WPForms, Forminator, SureForms, Ninja Forms, Fluent Forms, Gravity Forms, Elementor Pro Forms, Formidable Forms, Divi, and Jetpack Forms.
  • eCommerce — WooCommerce (orders, status changes, refunds, subscriptions, low/out-of-stock, failed payments) and Easy Digital Downloads.
  • Bookings — Amelia, FluentBooking, LatePoint, MotoPress Hotel Booking, and Five Star Restaurant Reservations.
  • Support & donations — Fluent Support and GiveWP.

Each integration is detected automatically — a detected / not detected badge appears next to its name — and each is off until you enable it.

Booking plugins that don't expose WordPress hooks (Bookly, Booknetic, BookingPress, and similar) can't be driven by this plugin. Connect those through the plugin's own webhook, the REST API, or Zapier — see Webhooks & Automation.

Installation

  1. In your WordPress admin go to Plugins → Add New and search for FlowAlert
  2. Click Install Now then Activate

Alternatively, download the zip from wordpress.org/plugins/flowalert (opens in a new tab) and install via Plugins → Add New → Upload Plugin.

Connect your API key

Go to Settings → FlowAlert:

FieldWhat to enter
API KeyYour FlowAlert API key — find it in Setup → API Keys in your FlowAlert dashboard
API URLLeave as https://api.flowalert.io/v1 (only change this if self-hosting)

Click Save Settings.

The integrations section is locked until you enter an API key. Once you paste your key, all integrations become configurable.

Verify the connection

Click Send test alert. You can test before saving — the button uses the key currently in the field, not the last saved value.

If you see "✓ Test event sent!", the connection is working. Check Dashboard → Alerts to confirm the event arrived.

💡

The test button sends a flowalert.test event. Because flowalert.* is a reserved prefix, this event will not trigger any routing rules — it is only used to confirm the connection. You still need to set up routing rules for the events your integrations actually send.


WordPress site events

The 🖥️ Site health → WordPress card needs no third-party plugin — it alerts on the operational events WordPress itself emits. Each toggle is off by default:

Event keyTriggerNotes
site.fatal_errorThe site hit a fatal error and entered recovery modeAlways sent as URGENT with acknowledgement required. The recovery link stays in the admin email — it is never sent through FlowAlert
site.update_failedA WordPress auto-update (core, plugin, or theme) failedOne aggregated alert per day
admin.loginA user with manage_options signs inIncludes the IP; deduped to one alert per admin per hour
plugin.activated / plugin.deactivated / theme.switchedA plugin is switched on/off or the theme changesRecords who did it — an unexpected one is a compromise signal
user.registeredA new user account is createdIncludes role and email

All five share one Priority setting (fatal errors override it to URGENT).

Site heartbeat

Under ⚙️ General → Site Heartbeat, the plugin pings a FlowAlert heartbeat monitor every 10 minutes via WP-Cron. If the site stops checking in — host outage, fatal crash, suspended account, broken cron — the silence pages whoever is on call.

Setup is one checkbox (plugin 1.2.0+): tick Enable heartbeat and save. Using your API key, the plugin asks FlowAlert to create this site's monitor (30-minute interval, 15-minute grace) and fills the check-in URL in automatically. Enabling it on the same site again reuses the same monitor — nothing is duplicated.

Prefer manual control? Create a monitor yourself under Heartbeats → New (interval 30–60 minutes) and paste its check-in URL into the field — a pasted URL always wins over auto-setup.

WP-Cron only runs when the site receives traffic — so what about a perfectly healthy site with a quiet night? Before paging anyone, FlowAlert probes the site over HTTP: if it still answers, the silence is treated as missing traffic, not downtime, and the alert is held (it only escalates if the site stays silent for hours while serving — the sign of broken cron or PHP behind a cache). If the probe fails too, you're paged immediately with both facts. Quiet sites no longer need oversized intervals to avoid false alarms.

For traffic-independent monitoring, also flip on the Uptime check on the site's card (Dashboard → Sites): FlowAlert visits your site from the outside every few minutes and fires site.down after three consecutive failures — no plugin, cron or traffic involved. The two signals complement each other.

The heartbeat authenticates by its unguessable URL token, so it works even before an API key is entered.


Forms

The plugin integrates with eleven form plugins, each detected automatically:

PluginDetected by
Contact Form 7WPCF7 class
WPFormsWPForms class
ForminatorForminator_Form_Model class
SureFormsSRFM\Plugin_Loader class
Ninja FormsNinja_Forms class
Fluent FormsFluentForm\App\Models\Form class
Gravity FormsGFForms class
Elementor Pro FormsElementorPro\Plugin class
Formidable FormsFrmEntry class
Divi (theme or Divi Builder)ET_BUILDER_VERSION constant
Jetpack FormsJETPACK__VERSION constant

Configuring a form integration

Every form integration has the same options:

SettingDefaultDescription
EnableOffMust be checked to send alerts
Event keyform.submittedThe event key sent to FlowAlert. You define this — it must match the key on your routing rule
PriorityNormalLOW / NORMAL / HIGH / URGENT
Body field key(blank)The form field whose value appears in the push notification body. Leave blank to auto-summarise the first few fields
Require acknowledgementOffStaff must tap Acknowledge in the app for each submission (Pro feature)

Contact Form 7 has two additional fields:

SettingDefaultDescription
Title field(blank)CF7 field name to use as the notification title. Leave blank to use the form name
Detail fieldyour-messageFull content shown when opening the alert in the app

When you enable an integration, the plugin automatically seeds the event type into your FlowAlert dashboard so it appears in the routing rule builder straight away.

Setting up routing rules for forms

In your FlowAlert dashboard, create a routing rule with the event key you configured above (default form.submitted):

  • Event key: form.submitted (or your custom key)
  • Target group: the group you want to notify
  • Requires ACK: match the setting you chose in the plugin

If you have multiple form types and want them to notify different people, give each integration a different event key (e.g. booking.submitted, contact.submitted) and create a rule for each.


WooCommerce

When WooCommerce is active, the plugin sends an alert every time a new order is placed.

SettingValue
Event keyorder.created (fixed, not configurable)
TriggerNew order via classic or block checkout
Default priorityHIGH
Requires ACKConfigurable

The plugin hooks into both woocommerce_checkout_order_created (classic checkout) and woocommerce_store_api_checkout_order_processed (block checkout). Built-in deduplication ensures only one notification fires per order even if both hooks run.

Data included in every order.created event:

FieldValue
data.order_idOrder ID
data.totalOrder total (formatted to 2 decimal places)
data.currencyCurrency code
data.billing_nameCustomer full name
data.billing_emailCustomer email
data.itemsNumber of line items
data.item_namesComma-separated product names and quantities
data.statusOrder status at time of creation
data.siteSite home URL

You can use these fields in routing rule filter conditions — for example, to route orders over a certain total to a different group.

Additional WooCommerce alerts

Each of these is off by default — enable them individually in the plugin settings:

Event keyTriggerEnable option
order.status_changedAny order status transition (e.g. processing → completed)Alert on order status changes
order.refundedAn order is fully or partially refundedAlert when an order is refunded
order.payment_failedA checkout payment fails (woocommerce_order_status_failed)Alert on failed payments
product.low_stockA product hits its low-stock threshold (woocommerce_low_stock)Alert on low / out of stock
product.out_of_stockA product reaches zero stock (woocommerce_no_stock)Alert on low / out of stock
subscription.status_changedA subscription status change (requires the WooCommerce Subscriptions extension)Alert on subscription status changes

Each event carries the relevant data.* fields and sets a dedupeKey, so a given transition fires once even if the underlying hook runs twice.

Failed payments and low-stock are two of the highest-value alerts you can turn on — a recovered order or a restock more than pays for the plan. They're off by default so you opt in deliberately.


Easy Digital Downloads

When Easy Digital Downloads is active, the plugin sends an alert on every completed purchase.

SettingValue
Event keypurchase.completed (fixed, not configurable)
Triggeredd_complete_purchase action
Default priorityHIGH
Requires ACKConfigurable

Data included in every purchase.completed event: payment_id, total, currency, customer_name, customer_email, items, item_names, site.

Create a routing rule with event key purchase.completed.


Bookings

For booking plugins that expose WordPress hooks, FlowAlert is a one-click toggle — no webhook to wire up. Enable the integration under 📅 Bookings and a booking pushes the moment it's made.

PluginDetected byEvents
AmeliaAMELIA_VERSION constantbooking.created, booking.cancelled
FluentBookingFLUENT_BOOKING_VERSION constantbooking.created, booking.cancelled
LatePointLATEPOINT_VERSION constantbooking.created
MotoPress Hotel BookingMPHB_PLUGIN_FILE constantbooking.created (on confirmation), booking.cancelled
Five Star Restaurant ReservationsrtbInit classbooking.created (new reservation requests)
SettingDefaultDescription
EnableOffSends an alert when a booking is created
Alert on cancellationsOff(Amelia, FluentBooking & MotoPress) also alert when a booking is cancelled
PriorityHIGHLOW / NORMAL / HIGH / URGENT
Require acknowledgementOffStaff must acknowledge each booking (Pro feature)

Each event carries the customer name, email, start time, and (where available) the service. Create a routing rule with event key booking.created — and booking.cancelled if you've enabled cancellations — and point them at your front-desk group.

Using Bookly, Booknetic, BookingPress, Simply Schedule, or another booking plugin not listed above? Those don't expose the hooks this plugin needs. Connect them via Webhooks & Automation instead — usually a few minutes in the plugin's own settings.


Support & Donations

PluginDetected byEventDefault priority
Fluent SupportFLUENT_SUPPORT_VERSION constantticket.createdHIGH
GiveWPGive classdonation.receivedNORMAL

Both follow the same pattern as the other one-click integrations:

SettingDefaultDescription
EnableOffSends the alert when a new ticket / donation arrives
Priority(as above)LOW / NORMAL / HIGH / URGENT
Require acknowledgementOff(Pro feature)
  • Fluent Support carries the customer, subject, and priority — route ticket.created to your support group and pair it with an escalation policy to enforce an SLA.
  • GiveWP carries the amount, currency, and donor — route donation.received to your fundraising team.

Plugins that connect a different way

The one-click integrations above work because each plugin exposes a WordPress action hook the FlowAlert plugin can listen on. Some popular plugins don't — either they're closed-source (no hooks) or they keep their data in their own tables. The FlowAlert plugin can't drive these directly, but they can still reach FlowAlert through their own webhook, the REST API, or Zapier.

This isn't a one-click toggle — it's a few minutes of setup in that plugin's own settings — but no code is involved. The full step-by-step for each lives in Webhooks & Automation.

PluginWhy it's not one-clickHow to connect
BooklyFully encapsulated core — exposes no developer hooksZapier (Bookly Pro includes it) or the REST API
BookneticClosed-source, no PHP hooksBuilt-in Webhooks workflow action → /v1/events
BookingPressNo suitable booking hookREST API / automation step
Simply Schedule AppointmentsNo suitable booking hookREST API / automation step
Easy AppointmentsNo suitable booking hookREST API / automation step
SupportCandyTickets stored in its own tables, no FlowAlert hookREST API / automation step
Awesome SupportNo suitable ticket hookREST API / automation step
RestroPressOwn order store, no WooCommerce hooksREST API / automation step
Uncanny Automator, WP Webhooks, SureTriggers/OttoKitAutomation hubs — they're the sender, not a data sourceAdd a webhook/HTTP step pointing at /v1/events

The booking plugins that are one-click — Amelia, FluentBooking, LatePoint — are listed under Bookings above. If your plugin isn't in either list, it almost certainly connects via the webhook/REST route — see Webhooks & Automation.


Email fallback

Under General in the settings page, you can enable an email fallback. If the FlowAlert API is unreachable when an event fires, the plugin will send a plain email via wp_mail so the alert is not silently lost.

SettingDefault
Enable fallbackOff
Fallback emailWordPress admin email

Agencies & fleets

Everything above assumes one site. If you look after many — an agency with 22 client installs, a franchise, a network — the plugin and API are built to onboard the whole fleet in minutes, into one FlowAlert workspace.

Each install identifies itself on every event, so the dashboard's Sites page fills in automatically: one row per site with its health, open alerts, check-in state and uptime-check status, and every push is prefixed with the site's name ([Acme Bakery] Fatal error) once a second site appears. Uptime checks are enabled per site from the same card — worth flipping on for every client site that matters (plans cap how many sites can have it on at once: 1 on Free, 5 on Pro, 50 on Agency).

Configure via wp-config.php

Instead of pasting the API key into each site's settings screen, define it in code (plugin 1.2.0+):

wp-config.php
define( 'FLOWALERT_API_KEY', 'fa_live_your_workspace_key' );
// Optional — only when self-hosting or pointing at staging:
define( 'FLOWALERT_API_URL', 'https://api.flowalert.io/v1' );

A defined constant always wins over the saved option, and the settings screen shows the field as managed by code. This is the natural fit for provisioning tools, site templates, and hosts that template wp-config.php.

Configure via WP-CLI

The plugin stores plain WordPress options, so the whole setup scripts cleanly:

# Install, activate, connect
wp plugin install flowalert --activate
wp option update flowalert_api_key "fa_live_your_workspace_key"
 
# Turn on the site's own alarms + dead-man's switch
wp option update flowalert_site_fatal_enabled 1
wp option update flowalert_site_update_enabled 1
wp option update flowalert_heartbeat_enabled 1
 
# Enable the integrations this site uses (one option per integration)
wp option update flowalert_woo_enabled 1     # WooCommerce
wp option update flowalert_cf7_enabled 1     # Contact Form 7
wp option update flowalert_gf_enabled 1      # Gravity Forms

Every toggle on the settings screen follows the same flowalert_*_enabled pattern — enable exactly what each site runs. The heartbeat provisions itself on the next wp-admin page load (or immediately if you enable it from the settings screen).

Run it across the fleet with a loop:

for site in site-a site-b site-c; do
  wp @$site plugin install flowalert --activate
  wp @$site option update flowalert_api_key "fa_live_your_workspace_key"
  wp @$site option update flowalert_site_fatal_enabled 1
  wp @$site option update flowalert_heartbeat_enabled 1
done

(@site-a style aliases come from your WP-CLI config (opens in a new tab).)

MainWP / ManageWP

From a management console, the recipe is the same two steps:

  1. Bulk-install the FlowAlert plugin from the WordPress.org repository to the selected sites (MainWP: Plugins → Install; ManageWP: Plugins → Add).
  2. Push the key: add the FLOWALERT_API_KEY line to each site's wp-config.php (MainWP's Code Snippets extension can inject it fleet-wide), or run the WP-CLI commands above through your host's terminal.

Once events start arriving, each install registers itself under Sites in your dashboard — rename any of them to the client name you actually use, and route alerts per site with a routing-rule condition on data.site.

One workspace, many sites is the intended model — plans are priced per workspace, not per site. Your team sees one alert feed, filterable by site, with one set of routing rules and escalation policies across the whole portfolio.