MillionSendStart at 1

Sendemails.

Open-source, Resend-compatible email API. Self-host on your own AWS SES, or use the cloud: 1,000,000 emails a month for $140. Migrate with two env vars.

Migrate on a Friday.

Point your Resend SDK at api.millionsend.com and swap the key. Same request and response shapes, documented endpoint by endpoint.

.env2 lines changed
RESEND_API_KEY=re_live_4f1c9e2a7b
RESEND_BASE_URL=https://api.millionsend.com
send.tsunchanged
import { Resend } from "resend";

const resend = new Resend(process.env.RESEND_API_KEY);

await resend.emails.send({
  from: "Acme <[email protected]>",
  to: ["[email protected]"],
  subject: "hello world",
  html: "<p>it works!</p>",
});
Sending through api.resend.comPOST /emails 200 { "id": "4ef9a417-02e9-4d39-ad75-9611e0fcc33c" }

Or the official SDK, in nine languages.

import { MillionSend } from "millionsend";

const ms = new MillionSend("ms_xxxxxxxxx");

await ms.emails.send({
  from: "Acme <[email protected]>",
  to: ["[email protected]"],
  subject: "hello world",
  html: "<p>it works!</p>",
});
npm install millionsend

See every email.

Every send is a row. Every row is a timeline: the SES events land in order with the gap between them, and repeats fold into one node with a count. Open a row for every occurrence, the SES payload, and the SMTP diagnostic on a bounce.

Emails
42,118,306 delivered since Tuesday
ToStatusSubjectSent
ClickedYour invoice for August
BouncedWelcome to Northwind
DeliveredDeploy 4128 finished in 3m 12s
OpenedReset your password
Queued (quota)Weekly digest, issue 212
ComplainedReceipt #88213
SentYou're on the list
Events[email protected] · 4ef9a417
SentAug 25, 6:31 PM
+1.92 s
DeliveredAug 25, 6:31 PM
+10.2 m
Aug 25, 7:13 PM
+32.4 m
Aug 25, 7:14 PMlumo.app/invoices/1093

Sample workspace. Click a row to load its timeline.


Metrics, day by day.

Daily sent, delivered, opened, clicked, bounced and complained, on one chart. The same numbers feed the deliverability guardrail: a broadcast stops on its own at 5% bounces or 0.1% complaints, before SES pauses the account.

Sent, 30 days
1,097,370
Delivered, 30 days
1,085,579
Bounce rate
0.39%
Delivered, all time
42,118,306

Sample workspace. Hover a day.


Audience.

Contacts are global to the team. Segments are saved filters, topics are what a contact agreed to receive, and every broadcast carries an RFC 8058 one-click unsubscribe. Import a CSV, select rows, edit in bulk.

No Marketing-vs-Transactional split, no second contact list to keep in sync.

Contacts
6 of 184,207
EmailSegmentsStatusAdded
Ana Beatriz RochaTrial, São Paulo2h ago
Devon OkaforPaying5h ago
Yuki Tanaka—Unsubscribed1d ago
Marta LindqvistPaying, Enterprise2d ago
Rafael NunesTrialSubscribed3d ago
Inês CaetanoChurnedUnsubscribed6d ago

Sample workspace. Hover a row, check it.


Self-host or cloud.

Same image, same API, same dashboard in English and Portuguese. Both paths end at the first send in under five minutes.

Self-host

# wizard: .env, IAM user, SNS topic, SES config set
npx @millionsend/setup
# postgres + one image, no redis
docker compose up -d
# dashboard :3000, api :3001
  • Your AWS SES account does the sending; AWS bills you.
  • Two services: Postgres and one image.
  • No plans, no caps, no license key.
  • AGPL-3.0. Fork it.
Self-hosting guide

Cloud

curl https://api.millionsend.com/emails \
  -H "Authorization: Bearer ms_xxxxxxxx" \
  -H "Content-Type: application/json" \
  -d '{
    "from": "[email protected]",
    "to": ["[email protected]"],
    "subject": "hi",
    "html": "<p>hi</p>"
  }'
  • 100 emails a day free, no card.
  • Bounce spikes pause sending automatically, protecting your domain reputation.
  • Email bodies and attachments are encrypted at rest with AES-256-GCM, in the app, before they reach the database.
  • Free and Starter cap per day; Pro and Scale include a monthly volume, overage optional.
Start at 1

Agents first.

The API was documented for people and for models. Skills teach Claude Code and Cursor the exact endpoints and error shapes; the MCP endpoint hands an agent a scoped token instead of your API key.

Agent Skills

npx skills add MillionSend/skills
millionsend-send-email
POST /emails, batch, scheduling, idempotency, SMTP relay
millionsend-migrate-from-resend
base URL swap, SDK swap, every known delta
millionsend-contacts
contacts, segments, topics, unsubscribe semantics
millionsend-broadcasts
draft, send, schedule, cancel, merge fields
millionsend-self-host
setup wizard, Compose, SES/SNS/SQS events, DNS
millionsend-webhooks
subscribe, verify Standard Webhooks signatures

MIT. Works with any Agent Skills client. MillionSend/skills

MCP

claude mcp add --transport http \
  millionsend \
  https://api.millionsend.com/mcp

OAuth 2.1 with per-grant scopes. Every connected app shows in settings and revokes in one click.

emails:sendemails:readaudience:readaudience:writebroadcasts:writedomains:read

Nine SDKs

Official and MIT licensed, one package name everywhere.


Pricing.

Pick a volume. Free and Starter cap per day; Pro and Scale include a monthly volume, and the price is the only thing that changes with it.

Move the slider to compare plans

Free
Recommended
/ month
100emails a day
 
  • 3 sending domains
  • Up to 1,000 contacts
  • Broadcasts: newsletters and campaigns, personalized per contact
  • Webhooks and API keys
  • MCP server, CLI, nine SDKs
Start at 1
Starter
Recommended
/ month
1,500emails a day
 
  • 10 sending domains
  • Unlimited contacts, segments and topics
  • Broadcasts: newsletters and campaigns, personalized per contact
  • Webhooks and API keys
  • MCP server, CLI, nine SDKs
Start at 1
Pro
Recommended
/ month
100,000emails a month
$0.30 per 1,000 past that
  • Unlimited sending domains
  • Unlimited contacts, segments and topics
  • Broadcasts: newsletters and campaigns, personalized per contact
  • Webhooks and API keys
  • MCP server, CLI, nine SDKs
Start at 1
Scale
Recommended
/ month
500,000emails a month
$0.25 per 1,000 past that
  • Unlimited sending domains
  • Unlimited contacts, segments and topics
  • Broadcasts: newsletters and campaigns, personalized per contact
  • Webhooks and API keys
  • MCP server, CLI, nine SDKs
Start at 1

At 3,000 a month: Resend $0, MillionSend $0. Resend pricing as of Sep 2026.

One price for every email. No per-contact fees.

Questions
Why do Free and Starter count per day, and Pro and Scale per month?

Free and Starter cap emails per UTC day: the counter resets at midnight UTC, and sends past the cap wait in the queue until then. Pro and Scale include a monthly volume counted over your billing period, which renews on your billing date.

What happens at the included volume on Pro and Scale?

Overage is on by default: sends past the included volume bill at the plan's per-1,000 rate on the next invoice, and stop at 5 times the included volume until the period renews. Turn overage off in Billing and the API answers 429 at the included volume instead; broadcasts park the overflow and finish when the period renews.

Does self-host have plans?

No. Self-host has no plans, no caps and no license key. The same image runs the whole product on your own AWS account.

What does self-host cost to run?

AWS bills SES directly: $0.10 per 1,000 emails. Beyond that you run Postgres and one container.

Self-host

$0, no caps, no plans.


Open source.

AGPL-3.0 for the platform, MIT for the SDKs and skills. Read the code before you trust it with your mail. Run it on your own account if you would rather not trust anyone.

Compatibility tests, the SES event parser, the encryption at rest: all in the open, all yours to fork.

MillionSend / millionsend

The open-source email platform. Send one. Send a million.

AGPL-3.0TypeScriptStar

Make the number go up.

100 emails a day, free, no card. 100,000 a month for $20. Two env vars if you are coming from Resend.