> 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 🎉


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://docs.shipped.club/features/authentication/loops.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
