NEWv2.4 — Dedicated IP warming is here

Transactional email
at legacy prices.
At a tenth the cost.

Self-hosted deliverability, a single API, and pricing that doesn't punish scale. Send a million emails for $79 — not $250.

3,000 emails/mo free · no credit card · ship in 4 lines of code

~/acme-labs · send.tsnode 20.11
import { VoltMail } from '@voltmail/node';
 
const vm = new VoltMail({ apiKey: process.env.VM_KEY });
 
await vm.emails.send({
from: 'noreply@acme.io',
to: 'user@example.com',
subject: 'Welcome to Acme',
html: welcomeTemplate({ name }),
});
 
// → 200 OK · id: em_01j… · 47ms
delivered·morgan@northwind.co
delivered·ana@peddlebee.co
opened·jin@terraflow.sh
clicked·eli@getrunway.app
47msMedian API latency
99.97%Deliverability · 90d
50k+/sPeak throughput
$0.00003Cost per email

Trusted by engineering teams at

NORTHWINDpinebrook.dev◆ RUNWAYacme/labsOLIVEPRESS□ FIELDKIT
// the stack

Everything you actually need.
None of the enterprise bloat.

We run on self-hosted Postal with rotated IPs and real warming. You get the dashboard. We take the 3am pages.

One API, four SDKs

REST + native clients for Node, Python, Go, and Ruby. Idempotency keys, batch sending, and retry semantics baked in.

Bring your domain

SPF, DKIM, DMARC — verified in under 90 seconds. Live reputation score per domain. Dedicated IPs on Pro Max.

Logs you'll actually read

Search every email for 30 days. Per-recipient timelines. Click + open tracking. Export as CSV, forever.

Scoped API keys

Separate test + live. Permission scopes per key. Rotate without downtime. Last-used tracking to audit what's stale.

Webhooks, but sane

Signed payloads. Exponential retry. Replay from the dashboard. Full delivery logs so you know exactly what fired.

Teams + roles

Invite engineers as members, marketers as viewers, ops as admins. SSO coming to Pro Max next quarter.

// developer experience

Built for the terminal tab, not the sales call.

No dashboard tours. No onboarding calls. Read the docs, paste a key, ship.

Idempotent sends

Every Idempotency-Key is cached for 24 hours. Retry the same job a hundred times, deliver exactly once.

Read the guide

First-class type safety

TypeScript SDK ships with full response types, discriminated-union errors, and Zod schemas for every webhook payload. Autocomplete everywhere.

View the types

Stream every event

Delivered. Opened. Bounced. Clicked. Deferred. Complained. Unsubscribed. Streamed with HMAC signatures and exponential retry.

clickedlink redirect 302em_01HQ7XE4K1J
deliveredPOST /v1/email 200em_01HQ7X9KVZT
openedbeacon.gif 204em_01HQ7X9KVZA
deliveredPOST /v1/email 200em_01HQ7XAB2MN
clickedlink redirect 302em_01HQ7X9KVZB
deliveredPOST /v1/email 200em_01HQ7XBPQ4S
bouncedsmtp 550 5.1.1 ---em_01HQ7XCFD2W
deliveredPOST /v1/email 200em_01HQ7XD88LG
openedbeacon.gif 204em_01HQ7XE4K1Z
deferredtempfail · retry 30sem_01HQ7XF1ZP9
clickedlink redirect 302em_01HQ7XE4K1J
deliveredPOST /v1/email 200em_01HQ7X9KVZT
openedbeacon.gif 204em_01HQ7X9KVZA
deliveredPOST /v1/email 200em_01HQ7XAB2MN
clickedlink redirect 302em_01HQ7X9KVZB
deliveredPOST /v1/email 200em_01HQ7XBPQ4S
bouncedsmtp 550 5.1.1 ---em_01HQ7XCFD2W
deliveredPOST /v1/email 200em_01HQ7XD88LG
openedbeacon.gif 204em_01HQ7XE4K1Z
deferredtempfail · retry 30sem_01HQ7XF1ZP9

Reply handling, parsed

Inbound messages parsed into structured JSON: headers, stripped signatures, attachments, quoted history. Build support ticketing in an afternoon.

Inbound docs
// sdks

One API. Every runtime.

Pick your language. The feature set is identical. The docs don't lie.

// npm i @voltmail/node
import { VoltMail } from '@voltmail/node';
 
const volt = new VoltMail(process.env.VOLTMAIL_KEY);
 
const { id } = await volt.send({
from: 'team@acme.dev',
to: 'dev@customer.io',
subject: 'Your receipt',
react: <Receipt order={order} />,
idempotencyKey: `receipt:${order.id}`
});
// in your editor

Batteries included.
Types included.

Drop @voltmail/node into your project and you get response types, webhook schemas, retry policies, and a mock client for tests.

voltmail-demo — send.ts
send.ts×webhook.ts×welcome.tsx×
1import { VoltMail } from '@voltmail/node';
2import { Welcome } from './emails/welcome';
3 
4const volt = new VoltMail(process.env.VOLTMAIL_KEY!);
5 
6// Fully typed. Full retry, exponential backoff, idempotency.
7export async function sendWelcome(user: User) {
8 const res = await volt.send({
9 from: 'team@acme.dev',
10 to: user.email,
11 subject: `Welcome, ${user.name}`,
12 react: <Welcome name={user.name} />,
13 idempotencyKey: `welcome:${user.id}`,
14 tags: ['onboarding', 'v2']
15 });
16 return res.id; // → "em_01HQ7X9KVZT…"
17}
● main · TypeScript 5.4 · ESMLn 14, Col 21 · UTF-8 · LF
// the math

Same delivery. 10× less spend.

We run our own Postal nodes on bare-metal VPS. No per-email markup. We pass the savings to you.

Emails / monthProvider AProvider BProvider CVoltMail
50,000$20$20$15$9
200,000$50$50$35$29
1,000,000$250$150$165$79
// shipped by

Engineers who hate email use it daily.

We built it for ourselves. Turns out everyone else wanted it too.

Migrated from Postmark in an afternoon. API is cleaner, pricing is better, and the deliverability numbers are identical.

J
Jordan Kim
Staff Engineer · Northwind

We send 400k transactional emails a month. VoltMail costs us $29. That's it.

A
Alex Rivera
CTO · pinebrook.dev

The webhook replay alone saved us six engineering hours after an outage. Worth every cent.

S
Sam Chen
Backend Lead · RUNWAY

Finally an email API that feels like a developer tool, not a marketing platform.

M
Morgan Taylor
Founding Engineer · acme/labs

DKIM setup took 80 seconds. I literally timed it.

R
Riley Park
Platform Engineer · OLIVEPRESS

Type safety on the webhook payloads is a blessing. No more 'what fields does this event actually have?'

C
Casey Nguyen
Senior Engineer · FIELDKIT

Migrated from Postmark in an afternoon. API is cleaner, pricing is better, and the deliverability numbers are identical.

J
Jordan Kim
Staff Engineer · Northwind

We send 400k transactional emails a month. VoltMail costs us $29. That's it.

A
Alex Rivera
CTO · pinebrook.dev

The webhook replay alone saved us six engineering hours after an outage. Worth every cent.

S
Sam Chen
Backend Lead · RUNWAY

Finally an email API that feels like a developer tool, not a marketing platform.

M
Morgan Taylor
Founding Engineer · acme/labs

DKIM setup took 80 seconds. I literally timed it.

R
Riley Park
Platform Engineer · OLIVEPRESS

Type safety on the webhook payloads is a blessing. No more 'what fields does this event actually have?'

C
Casey Nguyen
Senior Engineer · FIELDKIT
Free
For side projects and hobby sends.
$0/ mo
3,000 emails / month
  • 1 API key
  • Shared sending domain
  • 24-hour log retention
  • Open + click tracking
  • Webhooks (3 endpoints)
  • Custom domains
  • Dedicated IP
Start free →
Pro
For teams sending transactional, at scale.
$9/ mo
50,000 emails / month
cost / 1k$0.18
  • 5 API keys, scoped
  • 2 custom domains
  • 7-day log retention
  • React Email + templates
  • Idempotent sends
  • Email support · 48h SLA
Choose Pro
Most popular
Pro+
For apps hitting real volume, with real consequences.
$29/ mo
200,000 emails / month
cost / 1k$0.14
  • Everything in Pro
  • 15 API keys
  • 5 custom domains
  • 30-day log retention
  • Webhook replay + signing
  • Priority support · 8h SLA
Choose Pro+
Pro Max
For the 6M+/mo senders. Yours, dedicated.
$79/ mo
1,000,000 emails / month
cost / 1k$0.08
  • Unlimited keys + domains
  • Dedicated IP (auto-warmed)
  • 90-day log retention
  • SSO + SCIM (beta)
  • Priority + chat · 1h SLA
  • Custom data residency
Choose Pro Max

Need more than 1M/mo?

Custom contracts, dedicated IP pools, custom SLAs, private regions — all on the table.

Talk to us →

Ship your first email in
four lines of code.

Free forever up to 3,000 emails / month. No credit card. No sales call.