do_action was an
That's what Webhook Actions does. Every do_action in
WordPress — from core, WooCommerce, your favorite form plugin, or a plugin shipping next
month — becomes a first-class REST API event your CRMs, n8n flows, and AI agents can
consume. Queued, retried, logged, replayable.
/ The core idea
do_action as the integration surface?
WordPress already broadcasts everything important as an action — orders placed, forms
submitted, posts published, users registered, subscriptions renewed. The plugin treats
that action surface as your integration surface. Any do_action on your site,
including ones added by a plugin update next month, can be picked up as a trigger,
mapped into a JSON payload, and dispatched to any HTTPS endpoint.
No vendor SDK. No custom integration plugin per service. No glue code rotting in
functions.php. The hook itself is the API — and the integration architect's
toolkit around it (queue, retries, idempotent headers, scoped REST tokens, full delivery
log, replay) makes the WordPress side of your stack start to look like the rest of it.
The practical effect: the two-week project to wire WooCommerce into HubSpot turns into an
afternoon of configuration. The "can n8n pick this up?" question gets a yes before the
meeting ends. Every do_action you've ever wished was an API endpoint —
including the ones you haven't met yet — already is.
How that pipeline actually works under the hood: From do_action to HTTP →
/ What you get
Two webhooks and a dynamic URL template
(api.hubapi.com/crm/objects/2026-03/deals/{{ _hs_deal_id }}) turn a
WooCommerce order lifecycle into a HubSpot deal lifecycle. Store the remote id
locally on creation, replay it into the URL on every later event. Same pattern works
for Pipedrive, Notion, Airtable, internal services — any REST API that puts ids in
the URL path.
Send any WordPress event into n8n, Make, or Zapier in one click. Pull a Claude Code or Cursor agent into your wp-admin via scoped REST API tokens and let it inspect logs, retry deliveries, toggle integrations during deploys, or operate the queue programmatically — without ever touching WordPress admin credentials. CI/CD pipelines and external dashboards use the same surface.
Every event has a v4 UUID, an ISO-8601 UTC timestamp, a full request/response log,
and a replay button. X-Event-Id and X-Webhook-Id headers
give you clean dedup and idempotency downstream. Conditional dispatch, custom
headers, query parameters, all five HTTP methods, per-webhook synchronous mode for
tests — match exactly what each external API expects, no compromises.
Move the Zapier and Make tasks that bill per-run back into WordPress. Same triggers, same destinations, no per-zap pricing, no third-party data hop. The queue lives in your own database, the integrations stay readable and observable, and the bill stops scaling with event volume.
/ How it works
do_action actually become an API call?The plugin sits between WordPress and your external endpoints. A trigger fires, an event is captured, the payload is mapped, and delivery is handled asynchronously — with retry, exponential backoff, idempotency headers, and a full log of every attempt. The queue lives in your own database, under your control, and the same plugin scales from a single Contact Form 7 lead form to a high-traffic Black Friday store without changing a line of configuration.
do_action fires; its arguments are normalized into a clean JSON shape, with PHP objects walked into plain arrays so they actually JSON-encode cleanlyWant the full engineering walkthrough — including how the payload is normalized and how dynamic URL templates resolve at dispatch time? Read the deep-dive →
/ What goes through it
Not theoretical examples — patterns that ship in an afternoon and stay running:
Step-by-step walkthroughs of these flows live in the examples gallery.
/ Free vs Pro
The free plugin includes the queue,
retries, logging, REST API, payload mapping, conditional dispatch, custom headers and
URL params, and the X-Event-Id / X-Webhook-Id headers.
Pro adds {{ field.path }} URL templates
so a single webhook can target a different remote record per event, a Code Glue snippet
system that runs PHP per webhook+trigger when something genuinely custom is needed,
unlimited conditions, per-webhook retry and backoff settings, and priority support. One
purchase, no per-event metering, no upsell tiers — it's the kit that covers the edge
cases the integration architect's toolkit was built around.
/ FAQ
do_action — from core, WooCommerce, Contact Form 7, Gravity Forms, or any other plugin — into a first-class REST API event: captured, mapped into a JSON payload, dispatched to any HTTPS endpoint with retry and logging, and exposed over a token-authenticated REST API. It's how WP webhooks should have worked out of the box.
do_action — already running on your site, or shipped by an update next month — can be picked up as a trigger, mapped, and delivered. You don't need an SDK, a custom integration plugin, or vendor-specific code; the hook itself is the API.
do_action fires inside WordPress. The plugin captures its arguments, normalizes PHP objects into a clean JSON shape, applies your field mapping and conditions, queues the event in your own database, and dispatches it asynchronously with retry, exponential backoff, idempotency headers (X-Event-Id, X-Webhook-Id), and a full request/response log on every attempt. Full engineering walkthrough: From do_action to HTTP →
https://api.hubapi.com/crm/objects/2026-03/deals/{{ _hs_deal_id }} so a single webhook can PATCH a specific remote record per event.
X-Event-Id / X-Webhook-Id headers. Pro adds {{ field.path }} URL templates, Code Glue PHP snippets per webhook+trigger, unlimited conditions, per-webhook retry and backoff settings, and priority support.
Install the free plugin and turn your first do_action into a webhook in under
ten minutes. Upgrade to Pro when you need dynamic URL templates and Code Glue snippets.