Migrate from Resend to utobo Email
The same clean send call, plus broadcast campaigns, automations and an AI writer on the same platform — so you do not need a second tool when marketing email arrives.
Under an hour for a typical integration.
What stays the same
- Your sending domain and from addresses
- Your React Email templates (render with @react-email/render)
- Your send call shape — from, to, subject, html
- Your delivery event handling — the same events, delivered by webhook
The steps, from Resend to utobo Email
- 1
Create your account and API key
Sign up at email.utobo.com and generate an API key (av_live_…). Store it in your application's secure settings, not in source control.
- 2
Verify your domain
Account → Domains: add the single DKIM record utobo gives you. Verification is automatic and SPF, DKIM and DMARC are kept aligned for you.
- 3
Swap the SDK
Install the official Node.js SDK (full TypeScript declarations included) and replace the client. The send call keeps the same field names:
// Before (Resend): const resend = new Resend(process.env.RESEND_API_KEY); await resend.emails.send({ from, to, subject, html }); // After (utobo Email): import { UtoboEmail } from 'utobo-email'; const client = new UtoboEmail(process.env.UTOBO_EMAIL_API_KEY); await client.emails.send({ from, to, subject, html }); - 4
Keep your React Email templates
Render them to HTML exactly as before and pass the result as html:
import { render } from '@react-email/render'; import { WelcomeEmail } from './emails/WelcomeEmail'; const html = await render(<WelcomeEmail name={user.name} />); await client.emails.send({ from, to, subject: 'Welcome', html }); - 5
Map webhooks
Point your webhook endpoint at utobo and handle the delivery events — delivered, opened, bounced and complained. Payloads are HMAC-signed, so verify the signature before you trust an event. Bounces and complaints are also handled for you: affected addresses are suppressed automatically.
- 6
Or change nothing but SMTP
If your app sends over SMTP, this is the whole migration:
Host: smtp.mail.utobo.com Port: 587 (STARTTLS) or 465 (implicit TLS) Username: apikey (the literal word "apikey") Password: your utobo Email API key (av_live_…) - 7
Add the marketing side when you need it
Import contacts from a CSV (Contacts → Import), or add them through the API, and run broadcast campaigns and drip sequences against the same contact list your transactional email uses. If you used Resend Broadcasts, export those contacts and import them here.
- 8
Test and cut over
Send a test through the API and check the delivery logs, respect the per-minute rate limits (the API returns a Retry-After header when you hit one), then move production traffic.
What does not migrate
So there are no surprises on cut-over day.
- Historical logs and analytics (they stay in Resend)
- Resend-specific dashboard settings
Common questions
Ready to leave Resend?
Migration help is free — tell us your list size and setup and we will plan the move with you.