> For the complete documentation index, see [llms.txt](https://docs.shipped.club/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.shipped.club/features/authentication/loops.md).

# Loops

{% embed url="<https://www.youtube.com/watch?v=SwedBn58NIM>" %}
Using Loops to send Magic Link emails — Video tutorial
{% endembed %}

First of all, configure Loops.

For this to work you only need the `LOOPS_API_KEY` environment variable configured.&#x20;

[Follow this guide](/features/emails.md#create-api-key) to set it.

## Configure Auth to use Loops for Magic Link

Open `src/config/auth.ts` and set

```typescript
import { emailFrom } from "@/config";
import { sendTransactionalEmail } from "@/libs/loops"

/* ... */

providers: [
  EmailProvider({
    async sendVerificationRequest({ identifier: email, url }) {
      await sendTransactionalEmail({
        transactionalId: "", // the transactional id you created on Loops
        email,
        dataVariables: {
          url, // change it to the variable you set in the Loops transactional
        },
      });
    },
  }),
],
```

## Create a Transactional in Loops

Log in to Loops and go to [Transactional](https://app.loops.so/transactional).

Click "New" and create an email similar to this one:

<figure><img src="/files/iLGvVvwh2GuCJtcNvtaJ" alt=""><figcaption><p>Magic Link Email Transactional</p></figcaption></figure>

It is important that `url` is a **data variable.**<br>

<figure><img src="/files/add6qlCM3Mual2pLabvu" alt=""><figcaption></figcaption></figure>

Now click on "Next", copy the transactional id (a string with this format clq6w35vr000yib0qwz0bwxp7), and paste it in `auth.ts` as the value of `transactionalId`.\
\
You have now configured Loops to send the magic link email 🎉
