Email API

The email API built for software companies

Send transactional and marketing email through a REST API and typed SDKs. Use workflows for lifecycle email and let your team edit templates in Loops. Start on a free tier that does not expire.

See how Loops handles transactional email and marketing email.

Send your first email

Verify your sending domain, publish a transactional template, copy its transactionalId, and set LOOPS_API_KEY on your server. Replace the sample recipient and variables before running an example. The Next.js example is a server helper for an existing password-reset flow: the caller must supply the account email, its generated reset URL, and a persisted send key.

curl -X POST https://app.loops.so/api/v1/transactional \
  -H "Authorization: Bearer $LOOPS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "transactionalId": "YOUR_ID",
    "email": "YOUR_EMAIL",
    "dataVariables": { "firstName": "Alex" }
  }'

Node SDK

import { LoopsClient } from "loops";

const apiKey = process.env.LOOPS_API_KEY;
if (!apiKey) throw new Error("Missing LOOPS_API_KEY");
const loops = new LoopsClient(apiKey);

await loops.sendTransactionalEmail({
  transactionalId: "YOUR_ID",
  email: "YOUR_EMAIL",
  dataVariables: { firstName: "Alex" },
});

Python (HTTP API)

import json
import os
from urllib.request import Request, urlopen

request = Request(
    "https://app.loops.so/api/v1/transactional",
    data=json.dumps({
        "transactionalId": "YOUR_ID",
        "email": "YOUR_EMAIL",
        "dataVariables": {"firstName": "Alex"},
    }).encode(),
    headers={
        "Authorization": f"Bearer {os.environ['LOOPS_API_KEY']}",
        "Content-Type": "application/json",
    },
    method="POST",
)
with urlopen(request, timeout=30) as response:
    print(json.load(response))

Next.js (server helper)

import { LoopsClient } from "loops";

const apiKey = process.env.LOOPS_API_KEY;
if (!apiKey) throw new Error("Missing LOOPS_API_KEY");
const loops = new LoopsClient(apiKey);

export async function sendPasswordReset(
  email: string,
  resetUrl: string,
  sendKey: string,
) {
  const transactionalId = process.env.LOOPS_TRANSACTIONAL_ID_PASSWORD_RESET;
  if (!transactionalId) throw new Error("Missing password-reset template ID");
  return loops.sendTransactionalEmail({
    transactionalId,
    email,
    dataVariables: { resetUrl },
    headers: { "Idempotency-Key": sendKey },
  });
}

One platform

Sending, templates, and contact data

Transactional + marketing in one API

Send account messages and campaigns from the same platform.

Lifecycle workflows

Send a product event to start a workflow with emails, timers, and branches.

Editable templates

A visual editor so non-engineers can edit copy.

Webhooks

Delivery, open, click, bounce, and unsubscribe events.

Sending infrastructure

Sending-domain records, managed delivery, and bounce handling.

Audiences & contacts

One contact API with custom properties and lists.

Free tier

A free tier that doesn’t expire

The free tier includes up to 1,000 subscribed contacts and 4,000 combined marketing and transactional sends in any rolling 30-day window. It does not expire.

Buyer guide

How to choose an email API for SaaS

How to choose an email API for SaaS

Start with the messages you send today and the operations your team will own. Compare providers using the criteria below, then test the send paths you need.

Developer experience

Developer experience

Look for a simple REST endpoint, typed SDKs, clear docs, local setup paths, and server-side API-key handling that works in your existing stack.

Deliverability

Deliverability

Check which authentication, sending-domain setup, bounce handling, spam complaint suppression, and inbox-placement tasks the provider handles and which your team must manage.

Template workflow

Template workflow

Product and marketing teams should be able to edit reusable templates while developers pass variables, fallbacks, and transactional IDs from code.

Data model

Data model

The API should share contacts, events, and properties across transactional sends, campaigns, and lifecycle workflows instead of fragmenting customer state.

Observability

Observability

You need visibility into send status, bounces, complaints, and failures so transactional email is debuggable like the rest of your product.

Pricing

Pricing

Compare the free tier, contact limits, monthly send volume, transactional-email costs, and how pricing changes as your SaaS product scales.

Where Loops fits

Where Loops fits

Loops combines transactional sending, campaigns, and lifecycle workflows. Developers connect events and contact data while the team edits templates in Loops.

Transactional vs marketing vs lifecycle requirements

Transactional vs marketing vs lifecycle requirements

Password resets and receipts need timely delivery and correct account data. Campaigns need audience selection and unsubscribe handling. Onboarding and trial sequences also need product events and exit conditions. A behavior trigger alone does not make an email transactional. Promotional lifecycle messages still need marketing consent and unsubscribe handling.

Test one send path before migrating

Publish a test template, send it to a test account, and inspect the rendered variables and delivery event. Exercise missing variables, invalid credentials, rate limits, and retries. Check that marketing subscription changes reach your app and that account-critical mail follows its own rules.

When another provider type is a better fit

When another provider type is a better fit

A transactional-only API can be enough if you only send system messages and have no marketing or lifecycle plans. A newsletter tool can be enough if your product does not need server-triggered transactional messages or event-driven journeys. An enterprise suite can be a better fit for procurement requirements, multi-brand governance, or custom reporting. With self-managed SMTP, your team owns reputation, monitoring, bounces, complaints, templates, and compliance.

Frequently asked questions

What is an email API?

Is there a free email API?

What’s the difference between a transactional and a marketing email API?

Which languages and SDKs does Loops support?

How do I send my first email?

Can I use the Loops API from the browser?

How does Loops handle deliverability?

What are the Loops API rate limits?