From Resend
A near-identical API shape, plus the parts that are deliberately different.
The short version
The request bodies are close enough that most migrations are a base URL and an API key.
Field mapping
| Resend | OutSend |
|---|---|
from | from |
to | to |
subject | subject |
html | html |
text | text |
reply_to | replyTo (or reply_to) |
headers | headers |
scheduled_at | scheduled_at |
tags | — not currently supported |
- https://api.resend.com/emails
+ https://app.getoutsend.com/api/v1/emails
Event mapping
| Resend | OutSend |
|---|---|
email.delivered | email.delivered |
email.bounced | email.bounced |
email.opened | email.opened |
email.clicked | email.clicked |
email.complained | email.complained |
email.delivery_delayed | delivery_delay event |
Checklist
- Verify your domain and publish DKIM, SPF, and DMARC.
- Import your suppression list.
- Change the base URL and the API key. Rename
reply_toif you prefer the camelCase form. - Add an
Idempotency-Keyheader to anything you retry. - Point your webhook consumer at the new signature scheme.
Being fair about it
Resend is a genuinely good product with excellent developer experience, and it offers managed dedicated IPs — we are not going to tell you otherwise. The reasons to move are specific:
- The core is open source and self-hostable. You can read how sending, suppression, and reputation scoring work, run the whole thing yourself, and leave whenever you like.
- Events keep the provider’s raw payload, not only a normalised summary.
- No venture capital, so there is no acquisition clock and no quarter where reliability loses to growth.
- Published methodology for what we measure and how — see transparency.
If those do not matter for your use case, staying put is a reasonable decision.