Moving from Resend
The request and response shapes match, so in most codebases this is two lines. What follows is what actually differs, so nothing surprises you afterwards.
The change
await fetch("https://api.resend.com/emails", {
headers: { Authorization: `Bearer ${process.env.RESEND_API_KEY}` },
...
});
await fetch("https://digitalpigeon.golux.tech/v1/emails", {
headers: { Authorization: `Bearer ${process.env.DIGITALPIGEON_API_KEY}` },
...
});
If you use the Resend SDK rather than fetch, replace the call with a
plain HTTP request — the SDK pins its own host. It is a handful of lines, and it removes a dependency.
Verify your domain again
DNS records are per provider. Your Resend records keep working for Resend and do nothing here, so add the domain and publish the three records we give you. You can run both at once during the move — nothing conflicts.
Bring your suppression list
This is the step people skip, and it is the one that costs them. Your bounces and spam complaints live at your old provider. Start here with an empty list and you will re-send to every dead address you already learned about — which is exactly the pattern that gets a new sender throttled.
Export them and add them before you switch traffic over.
What is different
| Resend | Here |
|---|---|
| Base URL has no version | Versioned: /v1/emails |
| Multiple recipients per request | One recipient per request, so each has its own delivery outcome |
| Open and click tracking on by default | Off unless you turn it on per domain — it rewrites your message body |
| Audiences and broadcasts | Same idea; unsubscribing is scoped to the list, not the account |
Move in the right order
- Verify the domain here while Resend keeps sending.
- Import your suppression list.
- Switch one low-volume message type over and watch it in the message log.
- Move the rest once you have seen deliveries land.
Moving everything at once means a new sending domain with no history takes your full volume on day one, and receivers treat sudden volume from an unknown sender exactly as you would expect.