WooCommerce webhook
Collect orders, customers, products and coupons from your WooCommerce store.
Research Preview. This connector is rolling out account by account. Ask your Intempt contact to enable it for your workspace.
The WooCommerce webhook collects store activity: orders placed and paid, customers created, products published and changed, coupons created.
For a WooCommerce store this is the purchase spine. Order status transitions (paid, cancelled, fulfilled, refunded) all arrive here, and Intempt derives the commerce events from them.
Available events
WooCommerce core ships sixteen webhook topics. Intempt subscribes to all of them and derives the rest.
| Topic | Description | Intempt events |
|---|---|---|
customer.created | Customer account created | user_created |
customer.updated | Customer profile changed | user_updated |
customer.deleted | WordPress user deleted | user_deleted |
order.created | Order placed | order_created, checkout_completed, discount_applied when coupon lines are present |
order.updated | Any order change, including every status transition | order_edited, and order_paid, order_cancelled, order_fulfilled, order_refunded, refund_created by status |
order.deleted | Order trashed | order_deleted |
order.restored | Order restored from trash | Reverses order_deleted |
product.created | Product created | product_created |
product.updated | Product changed, including stock | product_updated, and inventory_level_updated, variant_in_stock, variant_out_of_stock from stock deltas |
product.published | Product moved to published | product_published |
product.deleted | Product trashed | product_deleted |
product.restored | Product restored from trash | Reverses product_deleted |
coupon.created | Coupon created | discount_created |
coupon.updated | Coupon changed | discount_updated |
coupon.deleted | Coupon trashed | Not mapped |
coupon.restored | Coupon restored | Not mapped |
Each event is normalised onto a named stream, so you build segments and journey triggers on the event name rather than on the payload shape.
Three payload facts that change what you can build:
*.deletedpayloads are{"id": 42}and nothing else. No email, no status, no timestamp. For orders and products the topic fires on trash, not on permanent delete, and*.restoredreverses it. Intempt records the deletion against the record it already holds and stamps receipt time.customer.deletedis the exception: WordPress users have no trash, so that one is a hard delete.product.publishedneeds WooCommerce 10.8.0 or later. Older stores never fire it.product.createdandproduct.updatedwork on every version.- Payloads carry current state only. There's no previous status on
order.updated. Intempt derives the status transition by comparing against the last state it holds for that order.
Product reviews have a REST resource but no webhook topic, so product_review_created arrives from the historical load and scheduled reads, not live.
Identity
The identity key is order.billing.email. A logged-in shopper also carries customer_id; a guest checkout has customer_id = 0 and resolves on email alone.
Product and coupon events have no person on them. WooCommerce products have no owner, subscriber or waitlist, so a back-in-stock audience is the set of past buyers of that product, read from the Orders API. WooCommerce core has no waitlist; a real notification list needs an extension.
Endpoint
The collector path for WooCommerce events is:
https://<your collector host>/webhooks/events/woocommerceWooCommerce signs each delivery with the secret you set on the webhook: X-WC-Webhook-Signature is an HMAC-SHA256 of the raw body, base64-encoded. Intempt verifies it against the source secret and rejects a delivery that doesn't match. X-WC-Webhook-Delivery-ID is used as the idempotency key, so a redelivery never double-counts.
Historical load
Connecting WooCommerce runs a one-time historical load before the webhook takes over. It covers: Customers, orders (with refunds), products and coupons over the wc/v3 REST API.
Deleted records can't be listed, so history holds what existed at connect time. The connector reports connected only once that load finishes, so a complete profile is never mistaken for a partial one. Records that arrive in the overlap between the load and the first webhook event are de-duplicated on the record id and X-WC-Webhook-Delivery-ID.
Backfilled records do not trigger journeys, workflows or experiments.
Setup
WooCommerce webhooks are created one per topic under WooCommerce Settings. Sixteen topics means sixteen webhooks, all pointing at the same endpoint with the same secret. Create the source in Intempt first.
Configure WooCommerce
-
Create a WooCommerce source on the Integrations page and copy the endpoint URL and secret.
-
In WordPress admin, go to WooCommerce, Settings, Advanced, then Webhooks, and click Add webhook.
-
Name it after the topic, set Status to Active, pick the Topic, paste the Intempt endpoint as the Delivery URL and the Intempt secret as the Secret. Leave API version at WP REST API Integration v3.
-
Save, then repeat for each topic in the table above.
-
Place a test order and confirm
order.createdappears in the Intempt event stream, then move it to Completed and confirmorder.updatedfollows.
WooCommerce disables a webhook after repeated delivery failures and marks it Disabled in the list. If events stop, check that column first.
