Loops.so Newsletter

Loops.so is the email marketing platform for SaaS. Newsletters, onboarding sequences, transactional campaigns. Wire it in to capture leads from your landing page and keep clients engaged after launch.

Last updated: 2026-03-29

Get Your API Key

Sign up at loops.so, create your audience, and copy your API key from Settings. Add it to your environment file.

.env
# .env
LOOPS_API_KEY=your_loops_api_key_here

Add a Contact to Your Audience

Create an Astro API route that adds new signups to your Loops audience. Call it from your newsletter form or signup flow.

src/pages/api/subscribe.ts
// src/pages/api/subscribe.ts
import type { APIRoute } from 'astro';

export const POST: APIRoute = async ({ request }) => {
  const { email, firstName } = await request.json();

  const res = await fetch('https://app.loops.so/api/v1/contacts/create', {
    method: 'POST',
    headers: {
      'Authorization': `Bearer ${import.meta.env.LOOPS_API_KEY}`,
      'Content-Type': 'application/json',
    },
    body: JSON.stringify({ email, firstName, source: 'flux-theme' }),
  });

  if (!res.ok) return new Response(JSON.stringify({ error: 'Failed' }), { status: 500 });
  return new Response(JSON.stringify({ success: true }), { status: 200 });
};

Send a Transactional Email

Trigger a Loops transactional template when something happens in your app. Purchase confirmations, project updates, client onboarding.

Terminal
// After a client books a project
await fetch('https://app.loops.so/api/v1/transactional', {
  method: 'POST',
  headers: {
    'Authorization': `Bearer ${import.meta.env.LOOPS_API_KEY}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    transactionalId: 'your_template_id',
    email: client.email,
    dataVariables: { name: client.name, project: project.title },
  }),
});