Resend has the closest API shape to ConvertNow — in most cases migration is a URL change and a key prefix swap.
HTTP API
Before (Resend)
curl -X POST https://api.resend.com/emails \
-H “Authorization: Bearer re_YOUR_KEY” \
-H “Content-Type: application/json” \
-d ‘{“from”:”[email protected]”,”to”:[“[email protected]”],”subject”:”Hello”,”html”:”<h1>Hi</h1>”}’
After (ConvertNow)
curl -X POST https://api.convertnow.co/v1/email/send \
-H “Authorization: Bearer cn_live_YOUR_KEY” \
-H “Content-Type: application/json” \
-d ‘{“to”:”[email protected]”,”subject”:”Hello”,”html”:”<h1>Hi</h1>”}’
Key differences
• URL: https://api.resend.com/emails → https://api.convertnow.co/v1/email/send
• Key prefix: re_ → cn_live_
• to stays as a string or array
• from is optional — falls back to your account sender
• cc and bcc work identically to Resend
Node.js
Before (Resend SDK)
import { Resend } from ‘resend’;
const resend = new Resend(process.env.RESEND_API_KEY);
await resend.emails.send({ from: ‘[email protected]’, to: ‘[email protected]’, subject: ‘Hi’, html: ‘<p>Hi</p>’ });
After (ConvertNow — no SDK needed)
await fetch(‘https://api.convertnow.co/v1/email/send’, {
method: ‘POST’,
headers: { ‘Authorization’: `Bearer ${process.env.CONVERTNOW_API_KEY}`, ‘Content-Type’: ‘application/json’ },
body: JSON.stringify({ to: ‘[email protected]’, subject: ‘Hi’, html: ‘<p>Hi</p>’ }),
});
Response shape comparison
Field | Resend | ConvertNow |
Success id field | data.id | id (top level) |
Status field | HTTP 200, no status key | status: “sent” |
Error field | error.name + error.message | error (single string) |
Feature status
Feature | Status |
Per-request from override | Built |
tags / metadata per send | Built — max 10 tags |
cc and bcc | Built |
Webhooks | Built |
Suppression list | Built |
Unlimited sending domains | Built — vs Resend 10-domain cap on Pro |
react field (server-side rendering) | Coming soon — render to HTML string |
Coming soon — render to HTML string