Migrate from Resend

Sendibl's sending API is shape-compatible with Resend's, and the official Resend SDKs support base-URL overrides. Most apps migrate with two environment variables — no code changes.

1. Add and verify your domains

Add each sending domain in the dashboard. If your DNS is on Cloudflare, the one-click auto-configure creates all records for you; otherwise publish the records shown and hit Verify.

Both services deliver through AWS SES, so Resend's SPF record at send.yourdomain.com is identical to ours and can stay. Its MX record at the same host is not — after your domains verify, delete any MX pointing at feedback-smtp.us-east-1.amazonses.com. Two conflicting MX records stop the branded envelope sender from verifying, and your mail shows mailed-by: amazonses.com instead of your domain.

2. Mint new API keys

Resend key secrets can't be exported, so create a fresh Sendibl key per app under API Keys.

3. Point your apps at Sendibl

If you use the official Resend SDKs, it's just environment config — the SDKs page covers every language (PHP, Go, Ruby, Rust, and the Java caveat) plus the full compatibility matrix:

Node (resend npm package)
RESEND_API_KEY=sb_...                        # your new Sendibl key
RESEND_BASE_URL=https://api.sendibl.com      # SDK reads this automatically
Python (resend PyPI package)
RESEND_API_KEY=sb_...
RESEND_API_URL=https://api.sendibl.com

Calling the REST API directly? Replace https://api.resend.com with https://api.sendibl.com — the request and response shapes for sending match:

POST /emails          {"from", "to", "subject", "html", "text", "cc", "bcc",
                       "reply_to", "headers", "attachments", ...}
POST /emails/batch    [ up to 100 email objects ]
GET  /emails/:id

4. Test before you cut over

Send to the simulator addresses (delivered@test.sendibl.comand friends) to exercise your integration end-to-end with zero reputation risk, then send yourself a real email and check Gmail's show details panel: you want mailed-by: send.yourdomain.com and signed-by: yourdomain.com.

5. Clean up

Once traffic flows through Sendibl:

  • Delete the old Resend MX at send.* (if you haven't already) and the resend._domainkey TXT record per domain.
  • Delete your Resend API keys, then the domains, then close the account.
Differences to note: Sendibl webhook signatures use different headers (sendibl-timestamp, sendibl-signature — see Webhooks), and test addresses live at @test.sendibl.com instead of @resend.dev.