Short answer: Postmark is the best transactional email API for most production apps in 2026, because it keeps password resets and receipts on their own stream and IPs, holds 45 days of message history, and starts at $15/month for 10,000 emails. Resend is the better choice for a Next.js or React team sending under 50,000 emails a month ($20/month, with React Email templates). Amazon SES is the cheapest at volume, at $0.10 per 1,000 emails, if you will build bounce handling yourself; SendGrid is hard to recommend for a new project.
Every app with a login form ends up sending email. Sign-up confirmation. Magic links. The password reset somebody requests at 11:40 p.m. and abandons if it takes four minutes to arrive. Our Clerk vs Auth0 vs Better Auth pricing comparison points out that self-hosted auth hands that job to "your own provider," and this page is about which provider. Prices below are list prices for transactional sending, checked on each vendor's pricing page on November 1, 2026.
Resend vs Postmark vs Amazon SES vs SendGrid: comparison table
| Provider | Best for | Free option | Entry paid plan | Message history | Dedicated IP | Key trade-off |
|---|---|---|---|---|---|---|
| Postmark | Production apps where a late reset email costs a customer | Developer plan, 100 emails/month, no overages | Basic $15/month for 10,000 emails, then $1.80 per 1,000 | 45 days (up to 365 on Pro and Platform) | From $50/month per IP, Pro plan or higher, 300,000+ emails/month | Basic overage is expensive; account needs approval before sending widely |
| Resend | Next.js and React teams, side projects that become real ones | 3,000 emails/month, capped at 100/day | Pro $20/month for 50,000 emails, then $0.90 per 1,000 | 30 days on every plan | $30/month add-on on Scale, for senders over 3,000 emails/day | Slack support and a response SLA start at Scale ($90/month) |
| Amazon SES | High volume, teams already running on AWS | Up to $200 in AWS Free Tier credits for new AWS customers | $0.10 per 1,000 a la carte; new accounts default to Essentials at $0.16 per 1,000 | None by default; you route events to CloudWatch, SNS, or Firehose | Standard $24.95/month per IP | Sandbox on day one, and bounce and complaint handling is your code |
| SendGrid | Teams already on Twilio that want marketing and transactional mail in one account | 60-day trial, 100 emails/day | Essentials from $19.95/month | 3 days on Essentials, 7 days on Pro | 1 included on Pro (from $89.95/month) | Three days of activity history on the entry plan |
What 10,000 to 1,000,000 emails a month costs
Base prices on pricing pages flatter whoever has the cheapest first tier. Here is the monthly bill at five volumes, using the cheapest published plan (or plan plus overage) that covers it.
| Emails per month | Resend | Postmark Basic | Amazon SES (Essentials) | Amazon SES (a la carte) | SendGrid |
|---|---|---|---|---|---|
| 10,000 | $20 (Pro) | $15 | $1.60 | $1.00 | $19.95 (Essentials) |
| 50,000 | $20 (Pro) | $55 | $8 | $5 | $19.95 (Essentials) |
| 100,000 | $35 (Pro) | $115 (125,000 plan) | $16 | $10 | Not shown in page text; Pro starts at $89.95 |
| 300,000 | $215 (Pro 100,000 plus overage) | $245 | $48 | $30 | Not shown in page text |
| 1,000,000 | $650 (Scale) | $775 (1.5 million plan) | $160 | $100 | Not shown in page text |
The SES column leaves out a dedicated IP ($24.95), attachment data ($0.12 per GB), and the engineer who wires up bounce handling, which is the real cost. Postmark Pro and Platform cost a little more per tier than Basic but have lower overage rates ($1.30 and $1.20 per 1,000) and configurable retention. SendGrid's volume selector shows tier prices only in the browser widget, and third-party sources commonly put the $19.95 Essentials tier at 50,000 emails, so confirm the higher tiers in the selector before budgeting.
One thing the table hides. Postmark Basic charges $1.80 per 1,000 past your tier, double Resend's $0.90, so a month where a bug sends every user three copies of the same receipt is a month you notice.
Where each option fits (and where it does not)
Postmark
Postmark is our pick, and the reason is boring. It refuses to mix your password resets with somebody's newsletter. Transactional and broadcast mail go out on separate message streams, broadcast traffic uses a separate IP pool, and Postmark publishes time-to-inbox figures on its status page. Message history defaults to 45 days. That sounds like a minor line item until a customer emails support on a Monday about a sign-in link from the previous Wednesday and you can actually open the message, see the delivery event, and tell them Gmail accepted it at 9:14.
It does not fit if your volume is spiky and your plan is small, because Basic overage costs $1.80 per 1,000. It also does not want your marketing blasts on the transactional stream, and new accounts need approval before they can send to arbitrary addresses.
// Postmark: send on the transactional stream explicitly
import { ServerClient } from "postmark";
const client = new ServerClient(process.env.POSTMARK_TOKEN!);
await client.sendEmail({
From: "login@example.com",
To: user.email,
Subject: "Your sign-in link",
HtmlBody: html,
MessageStream: "outbound",
});
Resend
Resend has the nicest developer experience of the four, and the team behind it maintains React Email, so templates can be React components that live next to the rest of a Next.js codebase and get type-checked with it. The free plan (3,000 emails a month, 100 a day) is enough for a real side project. Pro at $20 covers 50,000 emails, which is cheaper than Postmark at that volume by $35 a month.
Where it falls short is the support and isolation story for teams that live or die by deliverability: dedicated IPs and Slack support start on Scale at $90/month, and history is 30 days on every plan. For a team of two shipping a SaaS on Vercel, none of that matters yet. Start here, and move later if it ever does.
// Resend: the template is a React component
import { Resend } from "resend";
import { ResetEmail } from "@/emails/reset";
const resend = new Resend(process.env.RESEND_API_KEY);
await resend.emails.send({
from: "Acme <login@acme.dev>",
to: user.email,
subject: "Reset your password",
react: <ResetEmail url={resetUrl} />,
});
Amazon SES
SES is a pipe. A very cheap one: $100 for a million emails on a la carte pricing, against $650 on Resend Scale and $775 on Postmark Basic. In exchange you start in the sandbox (verified recipients only, 200 messages per 24 hours, 1 per second), you request production access per region, and you build the part the other three sell you. That means a configuration set, an event destination for bounces and complaints, a suppression list your app actually checks, and an alarm, because AWS puts an account under review at a 5% bounce rate or a 0.1% complaint rate.
Check which plan your account is on. AWS moved new accounts, and account-region pairs with no metered SES activity since June 1, 2025, onto the Essentials plan ($0.16 per 1,000) starting July 21, 2026. A la carte ($0.10) is still available; you switch in the console. On 1 million emails a month that is a $60 difference nobody will mention to you.
Above roughly 300,000 emails a month, with an AWS-literate team, SES is the right answer. Below that, the savings are smaller than one afternoon of debugging an SNS subscription.
SendGrid
SendGrid still delivers mail, and plenty of large companies run on it. We would not start a new project there in 2026. The permanent free plan is gone (a 60-day trial at 100 emails a day replaced it), Essentials keeps 3 days of activity history, and tier prices past the entry plan are not in the page text, only in a slider. It makes sense when you already use Twilio for SMS or Verify and want one bill, or when marketing campaigns and transactional email have to live in the same account. Pro includes a dedicated IP from $89.95/month, which is a fair price if you need one.
A note on running your own mail server
Running Postfix on a $6 VPS in 2026 is a fine hobby and a bad way to get a password reset into an Outlook.com inbox.
Setup that matters more than the provider
Since February 2024, Gmail and Yahoo have required SPF, DKIM, and a DMARC record from anyone sending more than 5,000 messages a day to their users, and they expect a spam complaint rate under 0.3%. All four providers walk you through DKIM. DMARC is on you, and a p=none record on the root domain is the minimum.
Two habits pay off on any provider. Send auth mail from a subdomain (login.example.com) so a marketing mistake on the main domain does not drag down sign-in links. And send from a background job with retries instead of inline in the request, so a 2-second provider hiccup never shows up as a failed sign-up; our Temporal vs Inngest vs Trigger.dev vs BullMQ comparison covers the queue side. If you are pricing a whole Next.js stack, the database and auth cost breakdown shows where email sits in the monthly bill. Other head-to-heads are on the reviews index.
How to choose
- Under 50,000 emails a month, on Next.js or React: Resend.
- Sign-in links and receipts that your support team will get tickets about: Postmark.
- Over 300,000 a month, with someone on the team who knows SNS: Amazon SES, switched to a la carte pricing.
- Already paying Twilio and you want one vendor: SendGrid.
Our default for a new production app is Postmark for auth and transactional mail, even at the point where Resend is cheaper. We'd pay the extra $35 a month at 50,000 emails for 45 days of history and a stream nobody else's newsletter touches. If budget is the constraint, Resend is close enough that you will not regret it.
Frequently asked questions
What is the best transactional email API for developers in 2026?
Postmark is the best default for production apps that send password resets and receipts: it keeps transactional and broadcast mail on separate streams and IPs, keeps 45 days of message history, and starts at $15/month for 10,000 emails. Resend is the better pick for a Next.js or React team sending under 50,000 emails a month, at $20/month with React Email support. Amazon SES is the cheapest at volume, at $0.10 per 1,000 emails on a la carte pricing, if you are willing to build bounce and complaint handling yourself.
Is Resend cheaper than Postmark?
At 50,000 emails a month, yes: Resend Pro is $20/month and Postmark Basic is $55/month. At 10,000 emails Postmark is cheaper ($15 against $20). Above 100,000 the gap narrows, and at 1,000,000 emails Resend Scale is $650/month against $775 for Postmark's 1.5 million Basic plan. Both list prices were checked on November 1, 2026.
How much does Amazon SES cost per email in 2026?
Amazon SES a la carte pricing is $0.10 per 1,000 outbound emails with no minimum fee. Since July 21, 2026, new SES accounts start on the Essentials plan at $0.16 per 1,000 emails instead, and you can switch to a la carte at any time. A standard dedicated IP is $24.95 per month.
Does SendGrid still have a free plan?
No. SendGrid replaced its permanent free plan with a 60-day free trial that allows 100 emails a day and needs no credit card. Paid Email API plans start at $19.95/month for Essentials and $89.95/month for Pro, which includes a dedicated IP.
Why can Amazon SES only send to verified addresses?
New SES accounts start in the sandbox, where you can send only to verified addresses, up to 200 messages per 24 hours and 1 message per second. You request production access per region from the SES console, and AWS reviews how you will handle bounces and complaints before approving it.