LIVEEmail API for developers

The email API you set up once
and never touch again.

Send password resets, magic links, and receipts through one API. Manage templates outside your codebase and change copy without a redeploy.

Free up to 3,000 emails / month · No credit card · No provider lock-in
POST /v1/send
import { senderkit } from "@senderkit/node";

// Edit this template in the dashboard. No redeploy.
await senderkit.send("password_reset", {
  to: user.email,
  vars: { reset_link },
});
Managed in SenderKitChange copy without a deploy

One endpoint, any language. Send your first email in minutes.

Works out of the box. Connects to your provider if you have one.

No external account needed to get started. Already using Amazon SES, Postmark, or SendGrid? Route through it instead — no lock-in.

Optional — bring your own provider
Amazon SESMailgunPostmarkTwilio SendGridSMTP
Use cases

Every transactional email your app needs

Password reset emails

Secure, expiring reset links your users actually receive.

Magic link & passwordless login

One-tap sign-in links and one-time codes, sent in milliseconds.

Welcome & onboarding sequences

Multi-step welcome series, triggered straight from your backend.

Billing receipts & payment notifications

Payment confirmations, invoices, and dunning notices.

Auth alerts

New-device and suspicious-login warnings, the moment they happen.

· How it works

Wire it up once. Change the copy without shipping code.

01

Wire it up once

One senderkit.send() call per email type. Type-safe variables enforced at compile time.

02

Edit copy without a deploy

Change subject lines, body, and CTAs in the dashboard. No PR, no redeploy, no on-call.

03

Roll back anything instantly

Every save is a version. Diff, branch, or roll back a bad password reset email in one click.

Features

Everything transactional email demands.

Template management

Rich editor for your team. Code editor for engineering. Same template, two views.

Built-in delivery, or bring your own

Send out of the box, or route through Amazon SES, Postmark, SendGrid, or raw SMTP. Switch anytime — no lock-in.

Versioning & rollback

Every save is a version. Diff it, branch it, roll back a bad send in one click.

Type-safe variables

The compiler enforces every variable. Never ship a reset email with a missing link.

Multi-environment

Separate staging and production templates. Promote a change when you're ready.

Edge delivery

Templates served from the edge. p99 under 150ms, anywhere in the world.

Before / after

Delete the template strings from your codebase.

reset-password/route.ts● HARDCODED
export async function POST(req) {
  const user = await findUser(req);

  // 40 lines of HTML, hardcoded in your route
  const html = `<h1>Reset your password</h1>
    <a href="${reset_link}">Reset</a> ...`;

  await mailer.send({ to: user.email, html });
}
reset-password/route.ts● MANAGED
import { senderkit } from "@senderkit/node";

export async function POST(req) {
  const user = await findUser(req);

  // Change the copy in the dashboard. No redeploy.
  await senderkit.send("password_reset", {
    to:   user.email,
    vars: { reset_link },
  });
}

Start sending transactional emails in minutes

Free up to 3,000 messages a month. No credit card. No sales call.

By creating an account, you agree to our Terms.