Migrate from Resend to SendNeo
Migrate from Resend to SendNeo
SendNeo accepts the Resend email request shape. Most applications can migrate by changing the API base URL and issuing a SendNeo key. Keep your request code, then test with an sn_test_ key before changing production credentials.
Node SDK
Set the base URL in the environment:
export RESEND_BASE_URL='https://sendneo.yorkermedia.com/api'
export RESEND_API_KEY='sn_test_your_key'
The Resend Node SDK reads RESEND_BASE_URL and sends requests to SendNeo. Use the SendNeo key in RESEND_API_KEY; the variable name remains the SDK's expected name.
import { Resend } from 'resend';
const resend = new Resend(process.env.RESEND_API_KEY);
const { data, error } = await resend.emails.send({
from: 'Acme <hello@mail.example.com>',
to: ['delivered@test.sendneo.dev'],
subject: 'Migration check',
html: '<p>This request is going through SendNeo.</p>'
});
if (error) throw error;
console.log(data);
If your SDK version does not read RESEND_BASE_URL, configure its base URL option or call SendNeo's REST endpoint directly. The important value is https://sendneo.yorkermedia.com/api, with /api included.
Endpoint mapping
| Operation | Resend-shaped call | SendNeo endpoint |
|---|---|---|
| Send one email | emails.send |
POST /emails |
| Send a batch | batch send | POST /emails/batch (up to 100) |
| Read a message | email retrieval | GET /emails/{id} |
| Cancel a scheduled message | cancel | POST /emails/{id}/cancel |
| Manage domains | domain API | GET|POST /domains, GET /domains/{id}, POST /domains/{id}/verify, DELETE /domains/{id} |
| Audiences | — | GET|POST /audiences, GET|POST /audiences/{id}/contacts, DELETE /audiences/{id}/contacts/{email} |
| Broadcasts | — | GET|POST /broadcasts, test, and send endpoints |
| Usage | — | GET /usage |
| Webhooks | — | GET|POST /webhooks, DELETE /webhooks/{id} |
What changes
SendNeo combines transactional mail and newsletters in one account. You can keep your application sending through /emails, then use audiences and broadcasts for creator or publisher mail. Every paid plan includes every feature and charges for emails sent, not contacts; contacts are unlimited on every plan.
New SendNeo accounts start in review. Before review opens, a live key can send only to your own verified team emails. Test keys work fully, and the review usually finishes within one business day. Plan your cutover around that review window.
SendNeo's free plan includes 3,000 emails per month with a maximum of 100 per day. Paid plans include a safety allowance for critical mail: when the monthly allowance is reached, transactional and welcome or confirmation mail can continue for up to 20% more while you upgrade; broadcasts wait.
Migration checklist
- Add the base URL and a test key in a non-production environment.
- Verify the sending domain in SendNeo and update DNS if needed.
- Send to the test-mode addresses in Test mode.
- Confirm that your code handles
{"id":"..."}and the standard error shape. - Add an idempotency key to retries.
- Register webhook endpoints if your application relies on delivery events.
- Change the production base URL and key during a controlled deployment.
Resend and SendNeo do not share message IDs or domain verification state. Treat the migration as a new delivery account and monitor the first live sends with webhooks.