Resend setup
A bare pipe: Resend delivers, and Mimeo does everything else. Fast to set up, and the option with the fullest reporting.
What you need
- A Resend API key (Resend dashboard → API Keys).
- A verified sending domain. Resend refuses every send without one, so Verify connection here refuses too rather than reporting a good connection you'd find out about later.
Setting it up
- Verify your sending domain in Resend, and wait for its DNS to check out.
- In Mimeo: Settings → Provider → Resend → Credentials. Paste the API key.
- Press Verify connection. It reports which domains are verified.
- Under Duties, set Resend as the one-off sender.
- Set up webhooks (below). Without them, suppression only ever comes from your own instance.
Credentials are encrypted in your instance's database. Never in a config file, never in an environment variable — so switching providers is a Settings change rather than a deploy.
Webhooks
Resend has no suppression read API at all — no endpoint to ask "who have you suppressed". Webhooks are the only way a Resend-side bounce or complaint reaches your instance, so set them up.
- Resend dashboard → Webhooks → Add endpoint.
- Point it at
https://your-instance.com/webhooks/email/resend. - Subscribe to
email.delivered,email.bounced,email.complainedandemail.suppressed. - Copy the signing secret (
whsec_…) into Settings → Provider → Resend → Credentials → Webhook secret.
Every request is checked against that signature. Without the secret configured, webhooks are refused — a signature is a much stronger claim than a shared secret, and there's no reason to accept less from a provider that offers it.
Leave open and click tracking off
Resend can track opens and clicks per domain. Don't turn it on. Tracking is Mimeo's — one dataset, with bot filtering, tied to the exact send — and two sets of numbers that disagree is worse than one.
What Resend does, and what Mimeo does
| Resend | Mimeo |
|---|---|
| Delivers the message | Decides who gets it and when |
| Reports delivery, bounces and complaints | Owns the suppression list and checks it before every send |
| — | Compiles the HTML, from your own layouts |
| — | Tracks opens and clicks |
| — | Sets the RFC 8058 unsubscribe headers, and hosts the one-click target |
| — | Paces the sending |
No bulk pipeline — which is fine
Resend has no broadcast API, so Mimeo can't hand a broadcast off to it. Broadcasts fan out through the ordinary paced queue instead. That's the better path anyway: guards apply, send windows apply, tracking applies, and every broadcast gets a full report.
Accepted isn't delivered
Resend silently drops mail to addresses it has suppressed region-wide, and still
answers success-shaped. So a send recorded as accepted may not have gone
anywhere. The email.delivered webhook is what turns acceptance into
delivery in the send log — another reason to set webhooks up.
No unsubscribe push
An unsubscribe in Mimeo isn't mirrored to Resend, because Resend has no API for it. It doesn't need to be: the standing suppression guard stops the send before Resend ever hears about it.
Switching to Resend from another provider
It's a Settings change. Enter the credentials, verify, reassign the duties. Your people, suppression list, flows, sequences, emails and history all stay exactly where they are — none of it was ever the provider's.
Worth knowing: your local suppression list won't have been mirrored into Resend, and doesn't need to be. Mimeo checks its own list before every send.
See also: Sending providers · Resend API notes