Event
trigger.woocommerce_event
TriggerBusiness appsconnection requiredruns in-engine
Registers one WooCommerce webhook per topic in the tenant's own store at publish and starts one run per delivery, verified against the signature.
Start a run when a WooCommerce store event arrives (order, product, customer or coupon).
Connection
- Required
- Yes — the node will not save without one
- Auth type
- Username & password
- Providers
- WooCommerce
- Secret shape
- {"consumer_key", "consumer_secret"}
- Config it needs
- store_url
- Resolved by
- config.connection_id, else node.connection_id
- Note
- The key pair needs Read/Write permission — a read-only key can list orders and still fail to create a webhook. The store_url must be https (WooCommerce only accepts the key pair as HTTP Basic over TLS) and MANTLE_APP_PUBLIC_BASE_URL must be set to a URL the store can reach, because it is what the store is told to POST to.
Configuration
1 field, none required. A dotted path is a nested object and name[] an array of objects — the editor renders the same tree.
| Field | Type | Required | Default | Constraints | Example |
|---|---|---|---|---|---|
topics Which store events to subscribe to. One WooCommerce webhook is registered per topic and deleted again when the workflow is unpublished or disabled. A plugin's own action.woocommerce_* or action.wc_* topic is accepted too, not only the ones listed. | array | No | ["order.created"] | 1–16 characters; array of string | — |
Example configuration
Every value below is the contract’s own example or default — nothing invented.
{
"topics": [
"order.created"
]
}Output
One shape.
woocommerce event
A flat envelope taken from WooCommerce's X-WC-Webhook-* headers, with the store's resource body under `payload`.
Extra keys beyond the ones listed can appear.
| Field | Type | Example |
|---|---|---|
topic The WooCommerce topic, e.g. order.created. Branch on this when the trigger subscribes to more than one. | string | order.created |
resource The half of the topic before the dot — order, product, customer or coupon. | string | order |
event The half of the topic after the dot — created, updated, deleted, restored or published. | string | created |
source The store that sent the delivery, as its WordPress home URL. | string | https://shop.example.com |
webhook_id The store-side webhook this delivery came from (X-WC-Webhook-ID). | string | 12 |
delivery_id WooCommerce's own delivery hash, and this trigger's idempotency key. | string | 8f2a1b0c9d4e5f60718293a4b5c6d7e8 |
id The resource id lifted out of the payload (the order, product, customer or coupon), as a string. On a *.deleted topic the payload is only this id. | string | 727 |
payload WooCommerce's own resource body, verbatim — an Order for order.*, a Product for product.*, and so on. Its keys depend on the topic, which is why this shape is open. | object | — |
{
"delivery_id": "8f2a1b0c9d4e5f60718293a4b5c6d7e8",
"event": "created",
"id": "727",
"payload": {
"billing": {
"email": "buyer@example.com",
"first_name": "Ada"
},
"currency": "USD",
"date_created": "2026-09-08T11:22:33",
"id": 727,
"number": "727",
"status": "processing",
"total": "42.00"
},
"resource": "order",
"source": "https://shop.example.com",
"topic": "order.created",
"webhook_id": "12"
}Notes
- One run per delivery, idempotent on X-WC-Webhook-Delivery-ID.
- Deliveries are verified against a signing secret minted at publish and kept in the SecretBroker; an unsigned or mis-signed POST is refused 401.
- The webhooks are deleted in the store when the workflow is unpublished, disabled or archived, so a shop never keeps delivering to a dead workflow.
- WooCommerce disables a webhook after five consecutive failed deliveries. Publishing again reconciles it back to active.
Related WooCommerce nodes
See Event run in a workflow.
In a technical demo we add the WooCommerce connection, drop the node on the canvas and let Workflow Health pre-flight it before the first real run.