> ## Documentation Index
> Fetch the complete documentation index at: https://loops.so/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Incoming webhooks

> Send data to Loops from supported platforms using webhooks.

export const SupabaseIcon = () => {
  return <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" fill="none" viewBox="0 0 109 113">
      <path fill="url(#a)" d="M63.708 110.284c-2.86 3.601-8.658 1.628-8.727-2.97l-1.007-67.251h45.22c8.19 0 12.758 9.46 7.665 15.874l-43.151 54.347Z" />
      <path fill="url(#b)" fillOpacity=".2" d="M63.708 110.284c-2.86 3.601-8.658 1.628-8.727-2.97l-1.007-67.251h45.22c8.19 0 12.758 9.46 7.665 15.874l-43.151 54.347Z" />
      <path fill="#ffbca6" d="M45.317 2.071c2.86-3.601 8.657-1.628 8.726 2.97l.442 67.251H9.83c-8.19 0-12.759-9.46-7.665-15.875L45.317 2.072Z" />
      <defs>
        <linearGradient id="a" x1="53.974" x2="94.163" y1="54.974" y2="71.829" gradientUnits="userSpaceOnUse">
          <stop stopColor="#FF4A00" />
          <stop offset="1" stopColor="#ffbca6" />
        </linearGradient>
        <linearGradient id="b" x1="36.156" x2="54.484" y1="30.578" y2="65.081" gradientUnits="userSpaceOnUse">
          <stop />
          <stop offset="1" stopOpacity="0" />
        </linearGradient>
      </defs>
    </svg>;
};

<Info>
  Incoming webhooks allow you to:

  * Create and update contacts
  * Send events to trigger workflows
</Info>

This feature lets external platforms send webhook events directly to Loops, making it straightforward to create or update contacts in Loops automatically when changes happen in other platforms.

You can also trigger events when webhooks arrive in Loops so you can send automated email after something happens in your other accounts.

## How it works

First, you create webhook endpoints in your Loops account. These allow other platforms to send data automatically and directly to Loops.

You then create webhooks in the external platforms, which send event data to your Loops endpoint URLs.

Note: we only process webhook events listed for each provider (and which contain an email address).

We return helpful messages in responses if there is an issue processing a webhook event. Check the webhook logs in your external platforms for more details.

For each type of webhook event, you can sync customer data like names and assign user groups, as well as trigger workflows via [events](/events).

<img src="https://mintcdn.com/loops/5tmj8Grr_67voqWe/images/webhook-event-configuration.png?fit=max&auto=format&n=5tmj8Grr_67voqWe&q=85&s=4d22c35dba3a06b754d6475bd3f4dfe4" alt="Incoming webhook configuration" width="2280" height="1509" data-path="images/webhook-event-configuration.png" />

### Syncing contacts

The primary use case for incoming webhooks is to create and update contacts in your Loops audience. When data arrives in Loops, we grab the email address to create and update contacts in your Loops audience. To this end, we only support incoming events that contain an email address.

You can choose to update first and last name data from the webhook event as well.

Additionally, you can assign a user group value to each new contact, which helps create segments from webhook-created contacts.

Any new contact created via a webhook will have a source like "Stripe webhook" so you know where it originated from.

For events that reference record deletion, like Stripe's `customer.deleted` event, you can choose to unsubscribe or delete contacts in Loops.

### Subscribing to mailing lists

You can subscribe contacts to [mailing lists](/contacts/mailing-lists) when they are created or updated via a webhook.

### Sending emails

Incoming webhooks can trigger emails if you connect events to [workflow triggers](/workflows/triggers). This can be useful if you want to automatically send emails when something has happened in the external platform, for example a successful payment in Stripe or a new sign up in Clerk.

Just create a workflow using the **Event received** trigger and select the event you want to trigger on.

<img src="https://mintcdn.com/loops/GKN1ibwh5TRStT8v/images/platform-event-trigger.png?fit=max&auto=format&n=GKN1ibwh5TRStT8v&q=85&s=8bb5f0603673f1de9ef932981f89a432" alt="Event received trigger" width="2280" height="1670" data-path="images/platform-event-trigger.png" />

You can also trigger custom events from incoming webhooks if you specify an event in the **Trigger an additional custom event** section in the configuration.

## Create webhook endpoints in Loops

To start sending webhook events to Loops, go to your chosen [integration's settings page](https://app.loops.so/settings) in Loops.

A webhook endpoint will be created for you. Copy the endpoint URL and paste it into your external platform.

<Tip>
  For Stripe, install the Loops app, which lets you skip the creating of webhooks as it's handled for you.
</Tip>

<img src="https://mintcdn.com/loops/K9TRANbphBauR0pJ/images/create-endpoint.png?fit=max&auto=format&n=K9TRANbphBauR0pJ&q=85&s=be75ea5d3e49aaa75248d6d157d5780b" alt="Endpoint form" width="2280" height="1556" data-path="images/create-endpoint.png" />

You may need to copy-paste signing secrets between the platform and Loops for extra security (we will prompt you when this is necessary and give you the steps to do it).

## Supported platforms

Learn more about how to configure webhooks for each platform, and see which events we support, below.

<CardGroup>
  <Card
    title="Clerk"
    icon={
  <svg viewBox="0 0 18 18" fill="none" aria-hidden="true"><ellipse cx="8.99999" cy="9" rx="2.81249" ry="2.8125" fill="#FF4A00"></ellipse><path fill="#FF4A00" d="M14.0674 15.6591C14.3067 15.8984 14.2827 16.2945 14.0015 16.4829C12.571 17.4411 10.8504 17.9999 8.9993 17.9999C7.14818 17.9999 5.42758 17.4411 3.99704 16.4829C3.71589 16.2945 3.69186 15.8984 3.93115 15.6591L5.98648 13.6037C6.17225 13.418 6.46042 13.3886 6.69424 13.5084C7.3856 13.8626 8.16911 14.0624 8.9993 14.0624C9.82948 14.0624 10.613 13.8626 11.3044 13.5084C11.5382 13.3886 11.8263 13.418 12.0121 13.6037L14.0674 15.6591Z"></path><path fill="#FF4A00" d="M14.0022 1.51706C14.2834 1.70539 14.3074 2.10155 14.0681 2.34084L12.0128 4.39619C11.827 4.58195 11.5388 4.61129 11.305 4.49151C10.6136 4.13733 9.83014 3.9375 8.99996 3.9375C6.20403 3.9375 3.93748 6.20406 3.93748 9C3.93748 9.83018 4.13731 10.6137 4.49149 11.3051C4.61127 11.5389 4.58193 11.827 4.39617 12.0128L2.34083 14.0682C2.10154 14.3074 1.70538 14.2834 1.51705 14.0023C0.558857 12.5717 0 10.8511 0 9C0 4.02944 4.02942 0 8.99996 0C10.8511 0 12.5717 0.55886 14.0022 1.51706Z" fillOpacity="0.5"></path></svg>
}
    href="/integrations/clerk"
  />

  <Card title="Stripe" icon="stripe-s" href="/integrations/stripe" />

  <Card title="Supabase" icon={SupabaseIcon()} href="/integrations/supabase" />
</CardGroup>
