# Send invites automatically from Teachable

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

Teachable can tell ReTestimonial when a student finishes a course, completes a lecture 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 Teachable. Smart Invites are on Premium and Business, and Teachable sends webhooks on its own Growth 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 Teachable event:

   | Tile                    | Asks                                       | Teachable event           | **Only invite when (optional)**                 |
   | ----------------------- | ------------------------------------------ | ------------------------- | ----------------------------------------------- |
   | **Teachable**           | When a student finishes a course           | `Enrollment.completed`    | `type` **equals** `Enrollment.completed`        |
   | **Teachable halfway**   | When a student is halfway through a course | `LectureProgress.created` | `object.percent_complete&#x60; **>=** `50` |
   | **Teachable purchases** | Some days after a student buys             | `Sale.created`            | `type` **equals** `Sale.created`                |

   All three read the student from **Email path** `object.user.email` and **Name path** `object.user.name`. **Teachable 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**.

2. **Add the webhook in Teachable**

   In Teachable, open **Settings** > **Webhooks** and click **Add Webhook**. Teachable's [webhooks guide](https://docs.teachable.com/docs/add-and-manage-webhooks) shows each field.

   1. Paste your URL as the **Webhook URL**.
   2. Leave the setting that sends the data as a JSON array off. ReTestimonial takes one event at a time, and turns down a list.
   3. Under the events, choose **Custom** and pick the event from your tile's row above.
   4. Save the webhook.

3. **Wait for the first student**

   Teachable has no button that sends a test event. The first student to reach your event is the first one invited, and the page shows **Event received — it works**. To see one sooner, enroll yourself in a short course and complete a lecture or the course.

## Halfway, once per student

Teachable sends `LectureProgress.created` every time a student completes a lecture, with how much of the course they've done. The first event at 50% 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. The same keeps a student who finishes later from being asked again by a second webhook for `Enrollment.completed`, as long as both webhooks are in the same project.

## What ReTestimonial reads

- **Bundles:** Teachable counts a bundle as one sale, and as one enrollment for each course in it. With **Teachable** or **Teachable halfway**, a student is asked for the first course they reach the point in.
- **Different courses, different forms:** on Business, add a **Conditional routing** rule on the `object.course.name` field to send each course's students to their own form.

## Keep the URL private

Teachable doesn't sign its webhooks, so there's no signing secret to add. The webhook URL itself is the only protection: it ends in a secret, and requests with a wrong one are refused. Anyone who has the whole URL can add contacts to your project and send them your invite emails. If it gets out, [delete the webhook](/help/collect/pause-change-or-delete-a-smart-invites-webhook#delete-a-webhook), create a new one and paste its URL into Teachable.

## 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)
