---
ref: tool:loops/send-transactional-email
name: Send a transactional email
company: company:loops
workflows: []
access: [mcp, cli, api]
tags: [capability:send-email, category:email, has:api, has:cli, has:mcp]
docs: https://loops.so/docs/api-reference/send-transactional-email
updated: 2026-09-27
---

# Send a transactional email

Sends a published transactional email to one recipient, filled with the data variables you pass.

Pass `transactionalId` and `email`, plus `dataVariables` for the template
(`--var KEY=value` on the CLI). Set `addToAudience` to also create the
recipient as a contact, and send an `Idempotency-Key` header
(`--idempotency-key`) so a retry never sends twice. Attachments work only
after Loops support enables them. On the MCP server, find this operation with
`search`, check its request shape with `describe` and run it with `execute`.

## Set up

Use the first option your agent supports.

### MCP (official, remote)

Add this server to your agent's MCP settings, then sign in when asked.

```json
{ "mcpServers": { "loops": { "url": "https://mcp.loops.so" } } }
```

Call the MCP tool `execute`.

Server URL: https://mcp.loops.so

### CLI (official)

Install the command, then confirm it runs.

```sh
brew install loops-so/tap/loops
loops --version
```

Run `loops transactional send`.

Set `$LOOPS_API_KEY` in your environment first (get a key: https://app.loops.so/settings?page=api).

### API (official)

- Base URL: https://app.loops.so/api
- Endpoint: `POST /v1/transactional`
- Auth: send the header `Authorization: Bearer $LOOPS_API_KEY`
- Get a key: https://app.loops.so/settings?page=api
- Docs: https://loops.so/docs/api-reference/intro

Before doing anything else, make one read-only call to confirm access.

## Rules

- Ask the user before anything that sends messages, costs money, or changes data.
- Never print API keys.
