rootmail
rootmail for developers

Stop rebuilding email inside every product.

You've written the in-house email service before — for your product, or a client's. Outsource that layer once: rootmail carries sending, templates, audiences, deliverability, and proof, so email keeps up with the market without you redeploying anything.

Typed Node SDK · CLI · REST — and everything stays editable from the dashboard by anyone you hand it to.

the-last-email-code.ts
import { RootMail } from "@rootmail/node";

const mail = new RootMail({ apiKey: process.env.ROOTMAIL_API_KEY! });

// The last email code you write for this product.
await mail.send({
  to: user.email,
  template: "welcome",            // designed & edited in the dashboard
  variables: { name: user.name },
  idempotencyKey: `welcome-${user.id}`,
});
Why outsource it

Email is a product of its own. Don't maintain two.

Every backend grows an accidental email service — templates in code, delivery mysteries, compliance TODOs. rootmail is that service, finished.

Change email without redeploying

Templates, sequences, sender domains, suppression rules — all live in rootmail, editable by you or the people you build for. Your product's code stays untouched when the email needs change.

The boring parts, guaranteed

Idempotent sends, automatic suppression and bounce handling, DKIM/SPF/DMARC, signed webhooks, and an append-only audit trail. You inherit a decade of email lessons in one integration.

Hand the keys to non-developers

Everything you wire up is drivable from a no-code dashboard. Build for a client, hand them the dashboard, keep the API — both of you work on the same data.

Grows into platform territory

Sending on behalf of YOUR customers? Client domains give each their own verified identity and isolated reputation — no re-platforming the day you become a platform.

Developers

An API you can hold in your head

snake_case JSON over HTTPS, a typed Node SDK and a terminal/CI-ready CLI, idempotency on every send, and sub-tenant scoping with a single call. Read the trail back whenever you need to prove what happened.

  • Fully typed @rootmail/node SDK + @rootmail/cli
  • Idempotency keys on every send
  • Sub-tenant scoping with withSubTenant()
  • Deliverability, analytics & the AI agent, in-SDK
send.ts
import { RootMail } from "@rootmail/node";

const mail = new RootMail({ apiKey: process.env.ROOTMAIL_API_KEY! });

// Idempotent transactional send — retries never double-send.
await mail.send({
  to: "user@example.com",
  template: "password-reset",
  variables: { reset_url, user_name },
  idempotencyKey: `pwd-reset-${user.id}`,
});
Parity, not a subset

Everything the dashboard does, the API does.

The web dashboard, the SDK, the CLI, and raw REST are four doors into one product — whatever gets built no-code is yours to drive in code, and vice versa.

Send

idempotent, templated, sandboxed

Templates & blocks

the studio's output, versioned

Contacts & audiences

import, segment, suppress

Campaigns

send, schedule, funnel stats

Sequences

multi-step, stop-on-reply

Replies

threaded inbound, webhook-routed

Webhooks

signed, idempotent, replayable

Deliverability

score, fixes, DNS records

Analytics

per campaign, sequence, tenant

Client domains

per-customer DKIM + verify

Proof exports

Ed25519-signed, tamper-evident

Assistant

build, operate & diagnose via API

The guarantees you'd have to build yourself

  • snake_case JSON over HTTPS — Bearer auth, no surprises
  • Idempotency keys on every send — retries never double-send
  • Test-mode keys & a hosted test inbox — sandbox sends are always free
  • Signed webhooks with delivery logs you can replay
  • Append-only audit trail on every message
  • One-command migration: SendGrid, Postmark, Mailgun exports

3,000 sends a month, free. No card.

Then blocks of 25,000 sends priced to drop as you grow — and sandbox sends never count. Live prices are on the main site; add-ons ride the same bill.