# Send invites automatically from Thinkific

Connect a Thinkific webhook to Smart Invites so each student is asked for a testimonial when they finish a course, reach halfway, or some days after they buy.

Thinkific can tell ReTestimonial when a student finishes a course, moves through it or buys, and Smart Invites then emails that student a request for a testimonial. You create a webhook in ReTestimonial, then add its URL in Thinkific. Smart Invites are on Premium and Business, and Thinkific sends webhooks on its own Grow plan and up.

1. **Pick when to ask**

   Follow [Send invites automatically with a webhook](/help/collect/send-invites-automatically-with-a-webhook) and, under **Where do you teach?**, pick one of three tiles. Each fills in the fields for one Thinkific topic:

   | Tile                    | Asks                                       | Thinkific topic        | **Only invite when (optional)**                       |
   | ----------------------- | ------------------------------------------ | ---------------------- | ----------------------------------------------------- |
   | **Thinkific**           | When a student finishes a course           | `enrollment.completed` | `action` **equals** `completed`                       |
   | **Thinkific halfway**   | When a student is halfway through a course | `enrollment.progress`  | `payload.percentage_completed&#x60; **>=** `0.5` |
   | **Thinkific purchases** | Some days after a student buys             | `order.created`        | `resource` **equals** `order`                         |

   All three read the student from **Email path** `payload.user.email` and **Name path** `payload.user.first_name`: Thinkific sends the first and last name apart, so a student's name in your invite emails is their first name. **Thinkific purchases** starts **Wait before the first email** at 14 days, so students have had time to begin; set it to suit your course.

   Choose the form and the emails, click **Create webhook**, then click **Copy** next to **Your webhook URL** and keep the page open.

2. **Add the webhook in Thinkific**

   In Thinkific, open **Settings** > **Code & analytics** > **Webhooks** and click **New webhook**. Thinkific's [webhooks documentation](https://support.thinkific.dev/hc/en-us/articles/4422658311703-Webhooks-Documentation) lists every topic.

   1. Paste your URL as the **Target URL**.
   2. Pick the model and the topic from your tile's row above. A Thinkific webhook has one topic; for a second moment, create a second webhook in both places.
   3. Choose a signing secret, or your site's API key, and keep a copy of it.
   4. Save the webhook.

3. **Paste the same secret**

   Back in ReTestimonial, paste the secret into **Thinkific signing secret (recommended)** and click **Save**. The field then reads **Signature verification is on — unsigned events are rejected.** A saved secret can't be viewed again; to change it, click **Replace secret** on the webhook's **Setup** tab.

4. **Send a test event**

   In Thinkific's list of webhooks, open the menu next to yours and send a test event. Thinkific's test student has an email address that starts with `[TEST]`. In ReTestimonial the event shows as **Skipped**, with "A test event from the platform, so nobody was invited and no invite was used": the connection works, and nobody was emailed.

## Halfway, once per student

Thinkific sends `enrollment.progress` as a student moves through a course, with the share they've done, where `0.5` is half. The first event at half or more invites the student. The later ones arrive within the webhook's **Re-invite cooldown (days)** and show as **Skipped** with "Customer was already invited within the cooldown window", so each student is asked once. To ask at another point, change the filter's **Value** in the webhook's **Settings**, for example to `0.25` for a quarter of the course.

## Skipped and failed Thinkific events

- **Signature failures.** When the secrets don't match, the event shows as **Failed** with "The signature didn't match". Set the same secret in Thinkific and with **Replace secret** on the **Setup** tab. Thinkific tries a rejected event again, for up to 16 hours, so one student can show as several failed events.
- **Repeat events are one invite.** Thinkific sends each retry with the same event id, and ReTestimonial invites the student once.
- **Different courses, different forms:** on Business, add a **Conditional routing** rule on the `payload.course.name` field (`payload.product_name` for orders) to send each course's students to their own form.

## Related articles

- [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)
- [Track invite campaigns](/help/collect/track-invite-campaigns)
- [Smart Invites](/help/collect/smart-invites)
