# Resend vs Wraps - Compare Email Infrastructure Approaches

Source: https://wraps.dev/compare/resend-vs-wraps

**Resend**is a managed email API built on top of Amazon SES. The developer experience is genuinely excellent and you are sending within minutes. It runs in Resend's AWS account, on Resend's sending reputation.

**Wraps** sets the same SES up inside your AWS account in one command, without touching anything already there, and then runs it day to day from the Wraps control plane.

Everything Amazon SES needs, including operations. Most teams reach for a hosted API because they do not want to deal with SES. Dealing with SES is the part Wraps does.

The real objection

## Price is not why people pick Resend over SES.

In September 2026 a team moving about 3,000 lifecycle emails a month off shared SMTP wrote their options up in public. They costed Amazon SES at roughly $0.30 a month against Resend at $20, called SES “cheapest by far” — and recommended Resend anyway. Their SES row, in full:

> “cheapest by far; AWS profiles already configured on the dev machine. Requires production-access request (sandboxed by default) and you must handle bounces/complaints yourself.”

A 66× price difference, AWS credentials already sitting on the dev machine, and the two clauses after that semicolon were still enough to make a hosted API the recommendation. That is the trade this page is about. Here is what Wraps does about each of those clauses — and what it does not.

“Sandboxed by default”

Wraps cannot grant production access and neither can anyone else selling you software — it is an AWS decision made from your own account, and some requests are refused. What the CLI does is detect sandbox at the end of a deploy, explain what it means, and point you at the request, so it is not something you discover from a failed send. That constraint applies to every approach that sends from an account you own.

“You must handle bounces/complaints yourself”

This one Wraps removes. Bounce and complaint processing, suppression, and the event pipeline are deployed with everything else on the first run. The dashboard then draws both rates against the lines Amazon enforces — review at 5% bounce and 0.1% complaint, sending paused at 10% and 0.5% — and sweeps the account hourly so a drift shows up before the suspension email does.

## TL;DR

|  | Resend | Wraps |
| --- | --- | --- |
| Setup | An API key | One command into your AWS account |
| Day-to-day operations | Resend runs SES on their account | Wraps control plane runs SES on yours |
| Infrastructure | Resend's AWS account | Your AWS account |
| Sending cost | $0.35-0.90/1K emails | $0.10/1K à la carte (AWS SES direct) |
| Data retention | 30 days (non-Enterprise) | Events in your DynamoDB, retention you set |
| If you cancel | Everything deleted | Infrastructure keeps running |
| Rate limits | 2 req/sec (all plans) | AWS SES limits (scales with reputation) |
| Data residency | US only (metadata) | Your chosen AWS region |

## Set it up once, then have it run

Two things sit between an AWS account and production email on SES. Wraps does both.

Setup

`wraps email init` deploys the whole email surface into the region you pick: SES with DKIM, an EventBridge rule, SQS with a dead letter queue, a Lambda event processor, a DynamoDB table for delivery history, and scoped IAM roles.

-   Everything namespaced `wraps-email-*`, so it sits alongside SES you already run
-   Account-level suppression switched on at deploy, bounces and complaints by default
-   Sandbox status read back at the end of the run, with the production-access request linked

Operations

The Wraps control plane runs it from there, against the account you own.

-   Bounce and complaint rates drawn against AWS's own review and pause lines, swept hourly, owners and admins notified
-   Your 24-hour send quota on the same card, with a warning line at 80%
-   CloudWatch alarms deployed into your account, set below AWS's lines: bounce warns at 2% and goes critical at 4% against AWS's 5% review line, complaints at 0.05% and 0.08% against 0.1%, plus any dead-letter message. Email or webhook to Slack, Discord or PagerDuty. On the Production and Enterprise presets; a Starter deploy has them off
-   Suppression you can browse and clear, and an event log per message
-   `wraps email check` audits DKIM, SPF, DMARC, MX, BIMI and public blacklists on demand; `doctor` names the fix

Resend does this work too, and does it well. They do it on their own account, on a sending reputation shared across their senders unless you buy a dedicated IP. On Wraps it happens on yours, on an account only you send from. The alarms are CloudWatch resources in your account, so they go on watching your reputation whether or not you keep paying us.

## The architectural difference

Resend and Wraps both use AWS SES to deliver email. The difference is where the infrastructure lives and who controls it.

Resend

Managed SaaS. Your email routes through Resend's infrastructure, and the sending account, the domain identities and the event history live with them.

-   Email metadata stored in the US regardless of sending region
-   Events capped at 30 days on non-Enterprise plans
-   Customer data deleted upon leaving
-   The sending reputation you build is theirs, not yours

Wraps

Two planes. SES, EventBridge, SQS, Lambda and DynamoDB run in your account, in your chosen region, and the per-event delivery history lands in that DynamoDB table at whatever retention your deploy config sets. Contacts, templates, broadcasts and workflow state live in the Wraps control plane, along with a row per message carrying recipient, subject, sender, template variables and delivery timestamps.

-   Sending and delivery data stay in the AWS region you pick
-   The account, the domain identities and the reputation are yours
-   Infrastructure persists if you stop using Wraps
-   Wraps reaches it by assuming an IAM role with an external ID, in one-hour sessions. No AWS keys are stored

One precision, because security review always asks. Wraps does hold message-level metadata in its own Postgres: recipient, subject, sender, template variables, delivery timestamps. The sending itself, and the full event history behind it, stays in your account.

## Pricing at real volumes

Resend bundles sending cost into their platform fee with $0.90/1K overage. Wraps charges a platform fee separately -- you pay AWS directly at $0.10/1K emails on à la carte (AWS defaults new accounts to $0.16 — Wraps tells you which plan applies).

| Volume | Resend | Wraps (platform + AWS) |  |
| --- | --- | --- | --- |
| 10K/mo | 
$20/mo

Pro

 | 

$1/mo

Free ($0) + $1 SES

 | 95% less |
| 50K/mo | 

$20/mo

Pro (at limit)

 | 

$34/mo

Pro ($29) + $5 SES

 |  |
| 100K/mo | 

$35-90/mo

Pro 100K / Scale

 | 

$39/mo

Pro ($29) + $10 SES

 |  |
| 500K/mo | 

$350/mo

Scale 500K tier

 | 

$79/mo

Pro ($29) + $50 SES

 | 77% less |

Wraps platform tiers: Free ($0/mo), Pro ($29/mo), Business ($199/mo) — priced on AWS accounts, dashboard history, and governance features, not send volume. All tiers include unlimited sends, contacts, domains, and templates.

Worth knowing on Resend: exceeding your tier auto-bills at $0.65-0.90/1K. Getting Scale features at 100K costs $90/mo (the $35 Pro tier skips SSO and caps domains at 10). CC/BCC count as separate emails. Marketing contacts billed separately ($40/mo for 5K contacts).

At 50K/mo the two are priced about the same, so price is not the reason to move. What changes is who sets the account up, who watches it, and where the events live: with Wraps they land in your own DynamoDB at the retention you choose, against Resend's 30-day cap. (Wraps dashboard history runs 30 days to 1 year depending on plan; the underlying events are always yours.)

## Feature comparison

| Sending | Resend | Wraps |
| --- | --- | --- |
| REST API |  |  |
| SMTP relay |  |  |
| Batch sending | 100/request |  |
| Scheduled sending |  |  |
| Idempotency keys |  |  |
| Attachments |  |  |

| Operations | Resend | Wraps |
| --- | --- | --- |
| Initial setup | API key | One command into your AWS account |
| Whose SES account and reputation | Resend's | Yours |
| Bounce and complaint rates vs AWS limits | Resend's to manage | Swept hourly, owners and admins notified |
| Alarms in your own AWS account | Their account, not yours | CloudWatch alarms on Production and Enterprise presets |
| Suppression list | Managed by Resend | Browse and clear in the dashboard |
| DKIM, SPF, DMARC and blacklist audit | Resend's to manage | wraps email check, on demand |
| Per-message event log |  |  |

| Tracking & Analytics | Resend | Wraps |
| --- | --- | --- |
| Open tracking |  |  |
| Click tracking |  |  |
| Bounce handling |  |  |
| Delivery events |  |  |
| Data retention | 30 days (non-Enterprise) | Events in your DynamoDB at the retention you set; dashboard history 30 days to 1 year by plan |
| Data export | Limited | Events in your DynamoDB, contacts exportable |

| Infrastructure | Resend | Wraps |
| --- | --- | --- |
| Infrastructure ownership | Resend | You |
| DKIM/SPF/DMARC |  |  |
| Dedicated IPs | $30/mo (Scale only) | Request via AWS |
| Sending regions | 4 regions | All AWS SES regions |
| Data residency compliance |  |  |
| Self-hosted / BYOC |  |  |

| Developer Experience | Resend | Wraps |
| --- | --- | --- |
| TypeScript SDK |  |  |
| Multi-language SDKs | 9 languages | TypeScript, Python |
| CLI tooling |  |  |
| React Email support |  |  |
| Template editing | No visual editor | AI designer + code editor |
| Time to first email | ~5 minutes | ~2 minutes |
| Requires AWS account |  |  |

| Platform & Compliance | Resend | Wraps |
| --- | --- | --- |
| Dashboard |  |  |
| Webhooks | 1-10 endpoints | Unlimited |
| Contacts | 1K free, 5K for $40/mo | Unlimited |
| SOC 2 |  | Not certified |
| HIPAA |  | Not offered |
| Cancel impact | Data deleted | Infrastructure persists |

## When to choose Resend

Resend is a good product. Here's when it makes more sense.

-   You don't have an AWS account and don't want one
-   You need SDKs in Ruby, Go, PHP, Java, Rust, or .NET today
-   You want managed dedicated IP warming and monitoring without thinking about it
-   You want a built-in visual broadcast editor with audience management
-   You would rather another team own the sending account and the reputation on it

## When to choose Wraps

Wraps is for teams that want Amazon SES without running Amazon SES by hand.

-   You already have an AWS account (or your company does) and would rather send from it
-   You want SES set up in one command: DKIM, event pipeline, suppression, bounce and complaint handling, non-destructively
-   You want bounce and complaint rates watched against AWS's own review and pause lines, with owners and admins notified
-   You want suppression you can browse and clear, deliverability and blacklist audits on demand, and an event log per message
-   You want the per-event delivery history in your own DynamoDB, at the retention you set, instead of a 30-day cap
-   You need sending and delivery data to stay in a particular AWS region
-   You want the sending infrastructure to keep running whether or not you keep paying us

## Switching from Resend

Both Resend and Wraps use SES underneath. React Email templates work unchanged. The migration is an SDK swap and DNS update.

Before (Resend)

send.tsx

```
import { Resend } from "resend";const resend = new Resend("re_123456");await resend.emails.send({  from: "hello@example.com",  to: "user@example.com",  subject: "Welcome",  react: <WelcomeEmail />,});
```

After (Wraps)

send.tsx

```
import { WrapsEmail } from "@wraps.dev/email";const email = new WrapsEmail();await email.send({  from: "hello@example.com",  to: "user@example.com",  subject: "Welcome",  react: <WelcomeEmail />,});
```

### Migration steps

1.  Install the CLI: `npm install -g @wraps.dev/cli`
2.  Deploy infrastructure: `wraps email init` (~2 minutes)
3.  Swap `resend` import for `@wraps.dev/email`
4.  Update DNS records (SPF may already be identical since both use SES)
5.  Done. Same DX, your account, and the control plane watching it from there

React Email templates are open source and work with any provider. Your domain reputation travels with you. The only thing that doesn't transfer is IP reputation if you were on Resend's shared pool.

[

Not sure it comes down to these two?

We also rank 13 Resend alternatives, prices included, with Wraps placed where it honestly belongs.

](https://wraps.dev/alternatives/resend)

## Also Compare

[

Amazon SES vs Wraps

Same infrastructure, better DX

](https://wraps.dev/compare/amazon-ses-vs-wraps)[

SendGrid vs Wraps

Escape the legacy tax

](https://wraps.dev/compare/sendgrid-vs-wraps)[

Customer.io vs Wraps

Unlimited contacts, no surprise bills

](https://wraps.dev/compare/customer-io-vs-wraps)[

Postmark vs Wraps

Beyond transactional sending

](https://wraps.dev/compare/postmark-vs-wraps)[

Klaviyo vs Wraps

Up to 5.6x cheaper at scale

](https://wraps.dev/compare/klaviyo-vs-wraps)[

Mailgun vs Wraps

Your infra, AWS pricing, no suspensions

](https://wraps.dev/compare/mailgun-vs-wraps)[

Hand-rolled bounce handling vs Wraps

152 honest lines, and what they don't cover

](https://wraps.dev/compare/ses-bounce-handling-hand-rolled-vs-wraps)

## One command sets up SES in your AWS account

Free to start, no credit card. The control plane watches the account from there.

[Get Started](https://wraps.dev/docs/quickstart)[Calculate Your Costs](https://wraps.dev/tools/ses-calculator)

Last updated: September 2026. We update this page as pricing and features change.

Seen something inaccurate? [Let us know at support@wraps.dev](mailto:support@wraps.dev)
