# Smart Invites webhook not inviting customers

Find out why a Smart Invites webhook isn't inviting your customers, whether no events arrive or they're skipped or failed, and fix each cause.

A Smart Invites webhook receives purchase events from your store or app and invites each customer by email. This article is for when orders come in and nobody is invited. For the other direction, a webhook that should send testimonials from ReTestimonial to your app, see [Webhooks not arriving](/help/troubleshooting/webhook-not-arriving).

Smart Invites are on Premium and Business. The workspace owner and the project's **Admin**s can open a webhook's page.

## Check this first

In your project's sidebar, open **Invites** under **Collect**, go to the **Webhooks** tab and click the webhook. Its page shows:

- a badge beside the platform's name: **Active** or **Paused**;
- four counts: **Received**, **Invited**, **Skipped** and **Failed**;
- the **Activity** tab, with the **Recent events**. Each one is labelled **Invited**, **Skipped** or **Failed**. Click **Refresh** to load new events, and click an event to see what your platform sent.

A webhook that has never received an event opens on its **Setup** tab instead.

Find the purchase you expected, then go to the section for what you see:

| What you see                                         | Go to                                                   |
| ---------------------------------------------------- | ------------------------------------------------------- |
| **Received** is 0, or the purchase isn't in the list | [If no event is listed](#if-no-event-is-listed)         |
| **Skipped**                                          | [If the event was skipped](#if-the-event-was-skipped)   |
| **Failed**                                           | [If the event failed](#if-the-event-failed)             |
| **Invited**, but the customer got no email           | [If the event says Invited](#if-the-event-says-invited) |

An event's first line is the customer's email address, or **No email extracted** when the event was stopped before its address was read. The reason is on the line under it.

## If no event is listed

An event that never reaches the webhook, or that the webhook discards, leaves no line in **Activity**. The causes, most likely first:

- **The webhook is paused.** Its badge says **Paused**. Events that arrive are acknowledged and discarded: your platform gets no error, and those customers aren't invited later. Click **Activate**. See [Pause a webhook](/help/collect/pause-change-or-delete-a-smart-invites-webhook#pause-a-webhook).
- **The URL in your platform isn't the webhook's whole URL.** Your platform then gets an error for every delivery: a 401 when the end of the URL is wrong, a 404 when no webhook has that URL, for example because it was deleted. On the **Setup** tab, **Webhook URL** shows the end of the URL as dots. Click **Copy**, which always copies the whole URL, and paste it into your platform again.
- **Your platform isn't sending the event.** Go through the steps on the **Setup** tab again, and check which event your platform's webhook is set to send. In Stripe and Paddle, test and live are set up separately, so a webhook added only on the test side gets no live purchases. Your platform's own delivery log shows what it sent and the answer it got.
- **That purchase has no event.** Stripe sends `checkout.session.completed` for Stripe Checkout and Payment Links only. Paddle sends `customer.created` once for each new customer, so a returning customer's purchase sends nothing.
- **WooCommerce's save check isn't listed.** Saving the webhook in WooCommerce sends a check with no order in it, so the first event appears with the first real order. WooCommerce can also deliver an event a few minutes late.
- **The project is read-only.** A project beyond your plan's project licences is read-only, and so is every project of a workspace that became read-only after a failed payment. A read-only project's webhooks list no events: one that arrives is answered as skipped. See [Project is read-only](/help/troubleshooting/project-is-read-only) and [Payment failed](/help/troubleshooting/payment-failed).
- **The event has left the list.** **Activity** shows the last 50 events, and events older than 30 days are cleared.

Each platform's own checks are in its guide: [Stripe](/help/collect/send-invites-from-stripe), [Shopify](/help/collect/send-invites-from-shopify), [WooCommerce](/help/collect/send-invites-from-woocommerce), [Gumroad](/help/collect/send-invites-from-gumroad), [Lemon Squeezy](/help/collect/send-invites-from-lemon-squeezy), [Paddle](/help/collect/send-invites-from-paddle) and [any other app](/help/collect/send-invites-from-any-app).

## If the event was skipped

A skipped event arrived fine, but nobody was invited and no invite was used. ReTestimonial told your platform the event was received. The reason is on the event's line:

This section is about webhook events. For customers left out of an import, see [Who isn't invited](/help/collect/invite-customers-by-hand-or-from-a-file#who-isnt-invited); for a single invite that was refused, see [If the invite isn't sent](/help/collect/invite-one-customer#if-the-invite-isnt-sent).

| Reason shown                                                                      | What it means, and what to do                                                                                                                                                                                                                                                                                                                                                                              |
| --------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Didn't match your “only invite when” filter                                       | The event didn't meet **Only invite when (optional)** in the webhook's **Settings**. That's expected for events you don't want, such as another kind of event from your platform. If a real purchase was skipped, click the event and compare what it holds with the filter's **Field path**, **Condition** and **Value**. With **equals**, the value has to match exactly, capital letters included. |
| A test event from the platform, so nobody was invited and no invite was used      | Stripe test-mode purchases, Shopify's **Send test notification** and test orders, and Lemon Squeezy test-mode orders are skipped on purpose. Only live purchases invite customers.                                                                                                                                                                                                                         |
| Customer was already invited within the cooldown window                           | This address was invited in this project within the webhook's **Re-invite cooldown (days)**, by any webhook, from a file or by hand. It's what you get when you test twice with one address. Use another address, or change the cooldown in **Settings**; 0 turns it off.                                                                                                                             |
| Email is on this project's do-not-email list                                      | The address is on the **Do not email** tab, for example because the person unsubscribed or an email to them bounced. See [Manage the do-not-email list](/help/collect/manage-the-do-not-email-list).                                                                                                                                                                                                       |
| This address bounced or reported an earlier email as spam, so it can't be emailed | The address is blocked for every email ReTestimonial sends, in any project. See [Emails not arriving](/help/troubleshooting/emails-not-arriving#an-address-stopped-getting-emails).                                                                                                                                                                                                                        |
| This feature is unavailable on the workspace's current plan.                      | The event arrived while your workspace was on a plan without Smart Invites. That customer isn't invited later.                                                                                                                                                                                                                                                                                             |

The **Skipped** count can be higher than the skipped lines you see. When your platform sends an event again after it already invited its customer, the repeat counts under **Received** and **Skipped**, invites nobody a second time and adds no line.

## If the event failed

A failed event couldn't be used, and no invite was used. The reason is on the event's line:

| Reason shown                                                                                                          | What to do                                                                                                                                                                                                                                                                                                                                                                                                                                                        |
| --------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| The signature didn't match — compare the signing secret on this webhook's Setup tab with the one your platform shows. | The secret saved on the webhook isn't the one your platform signs with: it belongs to another webhook there, or to test mode instead of live, or it was changed. A request with no signature, such as one you sent yourself to try the URL, fails the same way. On the **Setup** tab, click **Replace secret**, paste the secret your platform shows and click **Save**. These events open with **No payload recorded.**, because what they held isn't kept. |
| The platform sent a body that is neither JSON nor form data (XML isn't read). Set the platform to send JSON.          | The request held XML, nothing at all, or a list of several events. Set your platform to send JSON, one event in each request.                                                                                                                                                                                                                                                                                                                                     |
| No email was found at the mapped path — check the email path in this webhook's settings.                              | Click the event to see where the email address is in what your platform sent, then correct **Email path** in **Settings**. An event with no email address in it can't invite anyone.                                                                                                                                                                                                                                                                              |
| Invalid email: followed by a value                                                                                    | **Email path** points at a field that doesn't hold an email address, such as a name or an ID. Correct it in **Settings**.                                                                                                                                                                                                                                                                                                                                         |
| You were out of invites, so this customer wasn't invited.                                                             | The project's monthly allowance was used up and the workspace had no invitation credits. The **Invites this month** card on the **Overview** tab shows where you stand. The workspace owner can add credits: see [Buy invitation credits](/help/account/invitation-credits).                                                                                                                                                                                      |
| The webhook's form is paused or a draft                                                                               | Open the form in the form builder, click its status badge and choose **Activate form**. Or choose another **Default form** in the webhook's **Settings**. If the event's line shows a routing rule's label, the form is that rule's target form.                                                                                                                                                                                                                  |
| The webhook's form no longer exists                                                                                   | The form was deleted. Choose another **Default form** in **Settings**.                                                                                                                                                                                                                                                                                                                                                                                            |
| Webhook has no template configured                                                                                    | The webhook has no email sequence saved. **Email sequence** in **Settings** shows **Project default template**, but that isn't stored until you save. Open **Settings** and click **Save changes**.                                                                                                                                                                                                                                                               |
| The webhook's email template no longer exists                                                                         | A **Conditional routing** rule uses an email template that was deleted. In **Settings**, pick another template for that rule, then click **Save changes**.                                                                                                                                                                                                                                                                                                        |

## After you fix the cause

- **Changes in Settings apply to future events only.** The events already listed keep their result. See [Change a webhook's settings](/help/collect/pause-change-or-delete-a-smart-invites-webhook#change-a-webhooks-settings).
- **A skipped or failed event isn't tried again on its own.** Send it again from your platform: it's processed again, and **Activity** shows the new result. Or [invite that customer by hand](/help/collect/invite-one-customer). The two exceptions are a signature that didn't match and a body that couldn't be read: your platform was told those deliveries failed, so it may send them again by itself.
- **The same event sent again doesn't invite twice.** If it already invited its customer, the repeat is counted as skipped.

To check a fix without waiting for the next order, open the **Test** tab, paste an event into **Event payload** (for example one you opened in **Activity**) and click **Run test**. It's a dry run through the webhook's saved settings: nothing is saved and no email is sent. The result reads **This event would invite** with the address, or **This event would not send an invite** with the reasons.

The test doesn't check the signing secret, or whether the email sequence still exists, so an event can pass it and still fail for one of those two reasons. See [Test a Smart Invites webhook](/help/collect/test-a-smart-invites-webhook).

## If the event says Invited

**Invited** means the webhook did its part: the customer was added to the webhook's campaign. You'll find them on the **Campaigns** tab, in the campaign named after the webhook and ending in "— Auto".

If their email hasn't gone out or didn't arrive, see [Invite emails not sending](/help/troubleshooting/invite-emails-not-sending).

## Still not inviting?

[Contact us](/contact) and include:

- the project's name, the webhook's name and its platform;
- when the purchase happened, and the customer's email address;
- the reason on the event's line in **Activity**. If no event is listed, the error your platform shows for the delivery.

Leave the webhook URL out of your message: anyone who has it can add contacts to your project.

## Next steps

- [Send invites automatically with a webhook](/help/collect/send-invites-automatically-with-a-webhook)
- [Test a Smart Invites webhook](/help/collect/test-a-smart-invites-webhook)
- [Pause, change or delete a Smart Invites webhook](/help/collect/pause-change-or-delete-a-smart-invites-webhook)
- [Smart Invites](/help/collect/smart-invites)
- [Manage the do-not-email list](/help/collect/manage-the-do-not-email-list)
- [Webhooks not arriving](/help/troubleshooting/webhook-not-arriving), for the webhooks that send testimonials to your app
