Funnel Webhooks
A funnel webhook lets your online shop or form tool tell RestartiX Webinars when something happens — an order is placed or paid, a survey is completed — so the contact is counted in the matching step of your funnels. WooCommerce, MerchantPro and Tally are supported out of the box, and any other system that can send a JSON request can use the Generic type.
Access: admins and marketers can create and delete webhooks, copy their addresses and use them in funnel steps. Everyone on your team can see deliveries under Analytics → Webhooks.
How it works
A webhook is a web address that belongs to your organization, not to one funnel. You paste it into your shop or form tool once, then choose it in Webhook steps in as many funnels as you like.
Each time your provider sends a delivery to that address:
- The secret in the address identifies the webhook.
- The email address is read from the delivery, in the format of the webhook's type.
- The platform looks for a contact with that email in your organization. If there isn't one, nothing is recorded — webhooks never create contacts.
- Every Webhook step that uses this webhook, in any funnel, checks its status filter. Each step that accepts the delivery records an entry for the contact.
- The delivery is logged under Analytics → Webhooks.
The platform doesn't look at which event the provider says it's sending. Every delivery is handled the same way, so you separate stages — order placed, order paid — with the steps' status filters.
An entry is recorded only when all of these are true:
- The email matches a contact. Capitalization doesn't matter, but a buyer who uses a different address from the one they gave you isn't matched.
- The contact isn't already in the step. A contact enters a step once per session, or once overall in a standalone funnel. Repeat deliveries — "order updated" events, a second order — add neither entries nor revenue.
- In a webinar funnel, the contact is registered for that webinar. The entry goes to the session they attended live, or else one they watched on replay, or else one where they only joined the pre-show, or else their most recent registration.
- That session and the funnel are still active. Nothing is recorded for a session that has been archived — for example, an order that arrives after the session's replay has ended (see Sessions & Lifecycle) — or in an archived funnel.
Webhook types
| Type | Email is read from | Status the step filter checks | Kept with the entry |
|---|---|---|---|
| WooCommerce | billing.email | The order's status | Order ID, total and currency |
| MerchantPro | customer_email | The order's payment_status | Order ID, total, currency and payment status |
| Tally | The form's email-type field, or a field labeled Email, E-mail, Adresa email or Adresa de email (in any capitalization) | — | The whole submission |
| Generic | A top-level email field | — | The whole request body |
You choose the type when you create the webhook, and it can't be changed afterwards.
Create a webhook
- Go to Funnels and click Webhooks. The Funnel Webhooks panel lists your webhooks.
- Click New Webhook.
- Enter a Name — for example, "Main WooCommerce Shop" — and choose the Type.
- Click Create.
- On the new webhook's card, click Copy to copy its address.
The address ends in /v1/webhooks/funnel?secret= followed by a long secret. It never changes. You can't rename a webhook in the dashboard; to change the name or type, create a new webhook.
Set up your provider
Paste the address wherever your provider asks for a webhook URL. The platform accepts POST requests whose body is JSON.
MerchantPro
- Create a webhook for the order events you want to track, such as an order being created and its payment being completed.
- Send the full, default order payload. A minimal payload with only the order ID has no email address, so it's rejected.
- Steps filter on MerchantPro's
payment_status:temporary,awaiting,partially_paid,paid,failed,cancelled,refundedandrejected.
WooCommerce
- Create webhooks for order creation and order updates, so a step can catch an order when its status changes to the one you want.
- Steps filter on the order
status:pending,processing,on-hold,completed,cancelled,refundedandfailed.
Tally
- Add the address as a webhook on your Tally form.
- Include an email question, and ask respondents to use the address they registered with.
Generic
Send a POST request with a JSON body that has a top-level email field. To report revenue, add amount and currency at the top level too:
{
"email": "[email protected]",
"amount": 49.90,
"currency": "EUR",
"product": "Masterclass replay"
}Send amount as a plain number
Write amount as a number, such as 49.90. A value like "49,90 lei" can't be added up: the step shows no revenue at all whenever that entry falls within the funnel page's filters.
Use a webhook in a funnel
- Open the funnel and click Edit Funnel.
- Add a Webhook step from the Conversions group, or click an existing one.
- In Webhook, choose the webhook.
- For WooCommerce and MerchantPro webhooks, set the Status filter:
- Accept all records every delivery.
- Only specific records only deliveries whose status you tick. Switching to it ticks
completedandprocessingfor WooCommerce, orpaidfor MerchantPro.
- Click Save Changes.
A delivery with no status in it passes every filter. Several steps can use the same webhook, each with its own filter: the Sales template, for example, has Order Created (all statuses) and Purchase (processing and completed). The Sales and Questionnaire templates ask for a webhook when you create the funnel and use it in all their Webhook steps, so create the webhook first.
Check the filter on MerchantPro steps
New Webhook steps, and the Sales template's Purchase step, start with the WooCommerce statuses completed and processing ticked. MerchantPro never sends those, so the step records nothing. Once you choose a MerchantPro webhook those two statuses aren't in the list, so Only specific looks as if nothing is ticked. Click Accept all; if you want a filter, click Only specific again — it resets to paid — and tick the statuses you need.
Revenue
A Webhook step adds up the amounts of its entries: the WooCommerce order total, the MerchantPro total amount, or amount from a Generic delivery. The total appears under the step on the funnel page and in a Revenue KPI card, which uses the funnel's last Webhook step. The funnel page's session and date filters apply.
- Only the delivery that created the entry counts. A contact's second order in the same session doesn't add to revenue.
- Amounts in different currencies are added together without conversion, and only one currency code is shown.
Security
The secret in the address is the only check: if your provider signs its requests, the platform doesn't verify that signature. Anyone who has the address can send deliveries to it, so treat it like a password and keep it out of pages, chats and support tickets.
If the address leaks, create a new webhook, switch your provider and your Webhook steps to it, then delete the old one.
Check deliveries in the webhook log
Go to Analytics → Webhooks (Webhook Activity; see Analytics). Choose a funnel source — Funnel — WooCommerce, Funnel — MerchantPro, Funnel — Tally or Funnel — Generic — and a status to narrow the list. The cards count Total, Success, Errors and Skipped deliveries. Click a row in the Webhook Log to open Webhook Details, with the HTTP status, duration, error message and metadata. Click Load More for older deliveries.
| Status | Error Message | What happened |
|---|---|---|
success | — | A contact was found. Metadata shows the contact's ID and created, the number of new entries. |
skipped | contact not found | No contact in your organization has that email address. |
error | email not found in payload | The delivery had no email where the webhook's type expects one, or its body wasn't JSON. |
error | another message | Looking up the contact failed. |
Your provider gets a success response for success and skipped deliveries, so it won't retry them. Deliveries without an email address get an error response, which your provider may report as failed.
A success with created at 0 means no new entry was recorded, because:
- no funnel step uses this webhook;
- the step's status filter didn't accept the delivery's status;
- the contact already had an entry in the step for that session;
- in a webinar funnel, the contact isn't registered for that webinar, or the session the entry would go to is archived;
- the funnel is archived.
Deliveries sent with a wrong or missing secret are rejected before the platform knows which organization they belong to, so they never appear in the log.
Troubleshooting
| Problem | What to check |
|---|---|
| Nothing appears in the log | The address in your provider is incomplete or wrong. Copy it again from the webhook card, including the ?secret= part. |
email not found in payload | The webhook's type matches your provider, and the delivery contains an email: the full order payload for MerchantPro, an email question for Tally, a top-level email for Generic. Test pings without an email show up this way too. |
contact not found | The buyer or respondent used a different email address, or isn't a contact yet — for example, they bought without ever registering. |
success, but created is 0 | The reasons listed above. For MerchantPro, check the status filter first. |
| The log shows new entries, but the step's count doesn't change | The funnel page's session picker or date range excludes them, or they went into another funnel that uses the same webhook. |
| No revenue | The deliveries have no amount, one of the amounts isn't a plain number, or the Revenue KPI card is looking at a different Webhook step (it uses the last one). |
Delete a webhook
Click the trash icon on the webhook's card and confirm. You can only delete a webhook that no funnel step uses — otherwise you see Failed to delete. It may be referenced by funnel steps. First choose another webhook in those steps, or clear their Webhook field, including steps in archived funnels. Entries the webhook already recorded stay in your funnels.
Creating and deleting webhooks is recorded in the Audit Log.