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.
RESEND_API_KEY=re_live_4f1c9e2a7b
RESEND_BASE_URL=https://api.millionsend.comimport { 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>",
});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>",
});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.
| To | Status | Subject | Sent |
|---|---|---|---|
| Clicked | Your invoice for August | ||
| Bounced | Welcome to Northwind | ||
| Delivered | Deploy 4128 finished in 3m 12s | ||
| Opened | Reset your password | ||
| Queued (quota) | Weekly digest, issue 212 | ||
| Complained | Receipt #88213 | ||
| Sent | You're on the list |
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.
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.
| Segments | Status | Added | |||
|---|---|---|---|---|---|
| 2h ago | |||||
| 5h ago | |||||
| — | Unsubscribed | 1d ago | |||
| 2d ago | |||||
| Subscribed | 3d ago | ||||
| Unsubscribed | 6d 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.
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.
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.
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.
- 3 sending domains
- Up to 1,000 contacts
- Broadcasts: newsletters and campaigns, personalized per contact
- Webhooks and API keys
- MCP server, CLI, nine SDKs
- 10 sending domains
- Unlimited contacts, segments and topics
- Broadcasts: newsletters and campaigns, personalized per contact
- Webhooks and API keys
- MCP server, CLI, nine SDKs
- Unlimited sending domains
- Unlimited contacts, segments and topics
- Broadcasts: newsletters and campaigns, personalized per contact
- Webhooks and API keys
- MCP server, CLI, nine SDKs
- Unlimited sending domains
- Unlimited contacts, segments and topics
- Broadcasts: newsletters and campaigns, personalized per contact
- Webhooks and API keys
- MCP server, CLI, nine SDKs
At 3,000 a month: Resend $0, MillionSend $0. Resend pricing as of Sep 2026.
One price for every email. No per-contact fees.
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.
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.
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.
