Vanessa LozzardoResend vs SendGrid vs Sendkit: picking the right email API
Comparing Resend, SendGrid, and Sendkit on API design, pricing, deliverability, and developer experience to help you choose.

Choosing an email API feels like it should be simple. You send HTTP requests, emails go out, done. But after you've wired up the integration and pushed to production, the differences between providers start showing up in ways that are hard to undo: pricing that scales badly, missing features that force you onto a second platform, or API quirks that slow your team down.
I've spent time building with Resend, SendGrid, and Sendkit. This is an honest look at where each one fits and where each one falls short.
The short version
If you want the quick answer before we get into the details:
- Resend is great for developers who only need transactional email and love clean, modern APIs.
- SendGrid is the safe enterprise pick with the widest feature set, but it comes with complexity and per-contact pricing that stings at scale.
- Sendkit sits in the middle: clean API like Resend, but with campaigns, automations, contacts, and email validation built in. No per-contact fees.
That's the summary. The rest of this post is the evidence.
API design
API design matters more than people give it credit for. You'll be reading these docs at 11pm when something breaks, and bad ergonomics will cost you time every single time.
Resend
Resend has the cleanest API of the three. It's minimal, well-documented, and clearly inspired by Stripe's design philosophy. Sending an email looks like this:
import { Resend } from 'resend';
const resend = new Resend('re_123456');
const send = async () => {
const { data, error } = await resend.emails.send({
from: '[email protected]',
to: '[email protected]',
subject: 'Welcome aboard',
html: '<p>Thanks for signing up.</p>',
});
};Simple. The SDK returns { data, error } instead of throwing, which I prefer over try/catch for most send flows. The downside: Resend only does transactional email. No campaigns, no contact management. If you need those later, you're bolting on a second provider.
SendGrid
SendGrid's API has been around since 2009 and it shows. The v3 API is functional but verbose. Here's the same send:
import sgMail from '@sendgrid/mail';
sgMail.setApiKey('SG.xxxx');
const send = async () => {
await sgMail.send({
to: '[email protected]',
from: '[email protected]',
subject: 'Welcome aboard',
html: '<p>Thanks for signing up.</p>',
});
};Not terrible, but the SDK is showing its age. The personalizations array for batch sends is notoriously confusing, and the docs mix v2 and v3 examples in ways that will waste your time. SendGrid also has separate APIs for marketing vs. transactional, which means two mental models.
Sendkit
Sendkit's API borrows the good parts from Resend's design (JSON in, JSON out, predictable responses) and adds the features Resend is missing:
import { Sendkit } from '@sendkitdev/sdk';
const sendkit = new Sendkit('sk_live_your_api_key');
const send = async () => {
const { data, error } = await sendkit.emails.send({
from: '[email protected]',
to: '[email protected]',
subject: 'Welcome aboard',
html: '<p>Thanks for signing up.</p>',
});
};The email API covers transactional sends, batch sending, templates with Handlebars syntax, and inbound email parsing. You get SDKs for Node.js, Python, PHP, Ruby, Go, Laravel, .NET, Java, Elixir, and Rust. More language coverage than either Resend or SendGrid.

Pricing
Pricing is where most people should start this comparison, honestly. The cheapest option at 5,000 emails/month might be the most expensive at 100,000.
| Resend | SendGrid | Sendkit | |
|---|---|---|---|
| Free tier | 3,000 emails/mo, 1 domain | 100 emails/day | 3,000 emails/mo, 1 domain |
| 10K emails/mo | $20/mo | $19.95/mo (Essentials) | $15/mo |
| 50K emails/mo | $80/mo | $19.95/mo (Essentials) | $65/mo |
| 100K emails/mo | $80/mo | $34.95/mo (Essentials, up to 100K) | $85/mo |
| Contact storage | N/A (no contacts) | Charged per contact | Unlimited, all plans |
| Marketing email | Not available | Separate plan, per-contact fees | Included from $30/mo |
| Overage | Blocks sends | Varies by plan | $1 per 1,000 emails |
The per-contact pricing on SendGrid is the thing that bites people. You might be paying $19.95/mo for sends, then discover your contact list storage costs more than the sends themselves. I've talked to founders who didn't realize this until they got the invoice.
Resend is straightforward on pricing but only covers transactional email. If you need marketing campaigns, you're paying for Resend plus Mailchimp or ConvertKit. Those costs add up fast.
Sendkit charges by volume, not contacts. You can store unlimited contacts on every plan. The pricing page has a calculator if you want exact numbers for your volume.
Features beyond sending
All three can send an email. The real question is what else you need alongside that.
| Feature | Resend | SendGrid | Sendkit |
|---|---|---|---|
| Transactional API | Yes | Yes | Yes |
| SMTP relay | No | Yes | Yes |
| Marketing campaigns | No | Yes (separate product) | Yes (built in) |
| Automations | No | Yes (Marketing plan only) | Yes |
| Contact management | No | Yes (per-contact fees) | Yes (unlimited) |
| Email validation | No | Yes (paid add-on) | Yes (built in) |
| A/B testing | No | Yes | Yes |
| Drag-and-drop editor | No | Yes | Yes |
| Inbound email parsing | No | Yes | Yes |
| Webhook signing | Yes | Yes (but SendGrid calls it "Event Webhook Verification") | Yes (HMAC-SHA256) |
Resend is intentionally focused on transactional email. That's a valid choice, and if you know you'll never need campaigns or automations, Resend is excellent at what it does. But most products eventually need to send marketing email too, and then you're running two providers.
SendGrid has everything, but it's spread across multiple products with separate billing and separate APIs. The marketing side uses a different sending infrastructure than the transactional side. Switching between them is jarring.
Sendkit puts transactional, campaigns, automations, contacts, and email validation under one API and one bill. The SMTP relay works with Nodemailer, PHPMailer, or whatever you're already using. You don't have to choose between "developer tool" and "marketing tool" because it's both.
Developer experience
DX is subjective, so I'll stick to specifics.
Documentation
Resend's docs are clean and well-organized. They're short because the API surface is small. SendGrid's docs are extensive but disorganized. Finding the right example for your use case can take a while, and you'll run into outdated v2 references. Sendkit's docs at sendkit.dev/docs cover the full API with code examples for every supported language.
SDKs
Resend supports JavaScript/TypeScript, Python, Go, Ruby, PHP, Java, and Elixir. SendGrid supports most major languages but some SDKs feel abandoned (check the last commit dates). Sendkit covers Node.js, Python, PHP, Ruby, Go, Laravel, .NET, Java, Elixir, and Rust. The Rust and Elixir SDKs are worth mentioning because few email providers bother with those ecosystems.
SMTP support
Resend doesn't offer SMTP. If your app already uses SMTP (Rails ActionMailer, Laravel Mail, Django's email backend), you'll need to rewrite your sending layer to use their HTTP API. SendGrid and Sendkit both offer SMTP as a drop-in option:
// Sendkit SMTP with Nodemailer
import nodemailer from 'nodemailer';
const transport = nodemailer.createTransport({
host: 'smtp.sendkit.com',
port: 587,
auth: {
user: 'sendkit',
pass: 'sk_live_your_api_key',
},
});
const send = async () => {
await transport.sendMail({
from: '[email protected]',
to: '[email protected]',
subject: 'Your order shipped',
text: 'Tracking number: 1Z999AA10123456784',
});
};You still get open/click tracking and webhook events through SMTP. Some providers strip those features from SMTP sends, which is frustrating when you're migrating from an API-first setup.

Deliverability
None of these providers will magically fix deliverability problems caused by bad list hygiene or spammy content. But the infrastructure matters.
All three support DKIM, SPF, and DMARC authentication. All three handle bounces and complaints automatically (to varying degrees).
SendGrid has the longest track record here. They've been managing sender reputations at scale for over 15 years. Their shared IP pools are large and well-maintained. Dedicated IPs are available on higher-tier plans.
Resend is newer. They use Amazon SES under the hood, which has a strong track record. But they don't offer dedicated IPs yet, which matters if you're sending high volume and want full control over your sender reputation.
Sendkit offers dedicated IPs starting at the 100K emails/month tier. They run their own infrastructure (not a wrapper around SES), handle bounce processing and complaint loops automatically, and maintain dynamic suppression lists. The built-in email validation catches bad addresses before they hurt your reputation, which neither Resend nor SendGrid include by default.
The honest answer on deliverability: at typical startup volumes (under 100K/month), all three will deliver your email fine if your DNS is configured correctly and you're not sending spam. The differences show up at higher volumes or when you have a mixed sender reputation.
When to pick each one
Resend makes sense if you're building a product that only sends transactional email and you want the cleanest possible API. It does one thing and does it well. Just know that "just transactional" tends to be a temporary state for most products.
SendGrid is the right call if you're at an enterprise that needs a vendor with a long track record, or your compliance team wants a name they recognize. It works. It's just more complex than it needs to be, and the pricing gets weird once you factor in contact storage.
Sendkit is what I'd recommend if you want one platform for transactional and marketing email without paying per contact. The API is clean, the SDK coverage is wide, and you won't outgrow it six months in the way you might outgrow a transactional-only provider.
The migration question
Switching email providers mid-project is annoying but not catastrophic. The actual API swap takes a day or two. The harder parts are DNS changes (updating SPF/DKIM records, warming a new IP) and migrating templates.
If you're starting fresh, you have the luxury of picking once. My suggestion: think about what you'll need in 12 months, not just today. A lot of teams pick Resend or raw SES for their MVP, then spend a sprint migrating to something with more features six months later. That's fine if you plan for it. Less fine if it catches you off guard.
If you're curious about Sendkit specifically, the docs are the best place to start. The free tier gives you 3,000 emails/month with no credit card, which is enough to test a real integration before committing.
Share this article