Compare
Resend vs SendGrid vs Postmark vs Sendpository
Four email APIs developers shortlist, compared on what changes your code and your bill - including where each one is the better choice.
In short
All four send transactional email over a REST API with DKIM-signed mail and delivery webhooks. They differ in shape and focus: Resend is built around React Email, SendGrid is a broad platform with marketing tools, Postmark is known for its transactional-only focus, and Sendpository adds receiving with sender verification to a small API and a permanent free plan (6,000 emails a month (up to 200 a day), free forever).At a glance
| Sendpository | Resend | SendGrid | Postmark | |
|---|---|---|---|---|
| Free tier | 6,000 emails a month (up to 200 a day), free forever | Free: 3,000 emails a month, capped at 100 a day, one domain. Paid plans start at $20 a month for 50,000 emails. | The permanent free plan was retired in 2025 in favour of a 60-day trial (100 emails a day). Essentials starts at $19.95 a month for up to 100,000 emails. | Free developer plan: 100 emails a month, no expiry. Basic is $15 a month for 10,000 emails, with overage at $1.80 per 1,000. |
| Send endpoint | POST https://api.sendpository.com/v1/emails | POST https://api.resend.com/emails | POST https://api.sendgrid.com/v3/mail/send | POST https://api.postmarkapp.com/email |
| Authentication | Authorization: Bearer sp_... | Authorization: Bearer re_... | Authorization: Bearer SG.... | X-Postmark-Server-Token: <server token> |
| Request shape | Flat JSON: from, to, subject, html, text | Flat JSON: from, to, subject, html, text | personalizations, from object, content array | PascalCase JSON: From, To, HtmlBody, TextBody |
| Webhook security | HMAC-SHA256 in Sendpository-Signature | Svix: svix-id, svix-timestamp and svix-signature headers | Signed Event Webhook: ECDSA with a public key, in X-Twilio-Email-Event-Webhook-Signature and -Timestamp | No HMAC signature - secured with basic auth in the URL or an IP allowlist |
| Receiving email | Inbound addresses with SPF, DKIM and DMARC verdicts | Inbound email is available as a feature of the platform. | Inbound Parse posts incoming mail to your webhook. | Inbound processing posts parsed messages to your webhook. |
| Best for | Sending and receiving through one small API | Teams already building templates with React Email, and anyone who wants the most-used developer email API with the largest community. | Large organisations that want marketing campaigns, contact management and enterprise support contracts from the same vendor as their transactional email. | Teams that want a provider with a very long transactional-only reputation and separate message streams for transactional and broadcast mail. |
Competitor details are from their own documentation and pricing pages, checked 2026-09-25. Sendpository’s free tier is read from its live plans.
The same email, four ways
A receipt sent with each provider, so you can see what your code would look like.
import { Sendpository, SendpositoryError } from "sendpository";
const sendpository = new Sendpository(process.env.SENDPOSITORY_API_KEY);
try {
const { id } = await sendpository.emails.send(
{
from: "Acme <billing@mail.yourdomain.com>",
to: ["customer@example.com"],
subject: "Your receipt",
html: "<p>Thanks for your order.</p>",
text: "Thanks for your order.",
tags: { type: "receipt" },
},
// A retried job returns the first message's id instead of sending twice.
{ idempotencyKey: "receipt-10428" },
);
console.log(id);
} catch (err) {
if (err instanceof SendpositoryError) console.error(err.type, err.message);
throw err;
}import { Resend } from "resend";
const resend = new Resend(process.env.RESEND_API_KEY);
const { data, error } = await resend.emails.send({
from: "Acme <billing@yourdomain.com>",
to: ["customer@example.com"],
subject: "Your receipt",
html: "<p>Thanks for your order.</p>",
tags: [{ name: "type", value: "receipt" }],
});await fetch("https://api.sendgrid.com/v3/mail/send", {
method: "POST",
headers: {
Authorization: `Bearer ${process.env.SENDGRID_API_KEY}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
personalizations: [{ to: [{ email: "customer@example.com" }] }],
from: { email: "billing@yourdomain.com", name: "Acme" },
subject: "Your receipt",
content: [{ type: "text/html", value: "<p>Thanks for your order.</p>" }],
categories: ["receipt"],
}),
}); // 202, empty bodyawait fetch("https://api.postmarkapp.com/email", {
method: "POST",
headers: {
"X-Postmark-Server-Token": process.env.POSTMARK_SERVER_TOKEN,
"Content-Type": "application/json",
Accept: "application/json",
},
body: JSON.stringify({
From: "Acme <billing@yourdomain.com>",
To: "customer@example.com",
Subject: "Your receipt",
HtmlBody: "<p>Thanks for your order.</p>",
TextBody: "Thanks for your order.",
Tag: "receipt",
MessageStream: "outbound",
}),
});How to choose
| If you need… | Choose |
|---|---|
| React Email templates and the largest developer community | Resend |
| Marketing campaigns and contact management from the same vendor | SendGrid |
| Separate transactional and broadcast streams with a long delivery track record | Postmark |
| To receive email on your domain with sender verification, through the API you send with | Sendpository |
| Signed webhooks without running a verification library | Sendpository (HMAC-SHA256, one header) |
Questions
Which is best: Resend, SendGrid or Postmark?
It depends on the job. Resend suits teams building templates with React Email, SendGrid suits organisations that also want marketing campaigns and enterprise contracts, and Postmark suits teams that value a long transactional-only track record. Sendpository suits developers who want to send and receive through one API with a permanent free plan.
Which email API has the best free tier?
Free tiers change often. As published when this page was checked: Resend 3,000 a month capped at 100 a day, Postmark 100 a month, and SendGrid a 60-day trial instead of a permanent free plan. Sendpository's current free plan is shown in the table and on its pricing page.
Which of these signs its webhooks?
Resend signs with Svix headers, SendGrid offers an ECDSA-signed Event Webhook, and Sendpository signs every webhook with HMAC-SHA256. Postmark's documentation says it does not support HMAC signatures and recommends basic auth or IP allowlisting.
Detailed comparisons and migration guides
Sendpository vs Resend
Apps that need to send and receive email through one API, and teams that want strict-DMARC-ready DKIM by default.
Migrate from Resend
Usually under an hour for the code, plus DNS propagation.
Sendpository vs SendGrid
Developers who want one small API to learn, and receiving email on the same account without a separate setup.
Migrate from SendGrid
An afternoon for most codebases - the request shape is the main rewrite.
Sendpository vs Postmark
Apps that also need to receive email with sender verdicts, through the same API they send with.
Migrate from Postmark
An hour or two - the request maps field for field.
Also compared: Mailgun and Amazon SES.
Send your first email in minutes
6,000 emails a month (up to 200 a day), free forever. No card needed.