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
LOOPS_API_KEY=your_loops_api_key_hereAdd 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
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.
// 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 },
}),
});