Skip to content

Resend compatibility

3AVA Mail’s transactional API is wire-compatible with Resend’s. If you’re already using the Resend SDK or have built around https://api.resend.com, you can switch with a one-line baseUrl override.

import { Resend } from "resend";
// Point the SDK at 3AVA Mail.
const resend = new Resend(process.env.AMDY_API_KEY, {
baseUrl: "https://mail.3ava.com/api",
});
await resend.emails.send({
from: "Acme <[email protected]>",
subject: "Order confirmed",
html: "<p>Thanks for your order.</p>",
});

That’s the only change. Everything else — request shape, response shape, attachment encoding, headers — matches.

Resend3AVA MailNotes
POST /emailsPOST /emailsIdentical request body.
POST /emails/batchPOST /emails/batchUp to 100 per request.
GET /emails/:idGET /emails/:idReturns the same fields plus bounce_type, bounce_detail.
POST /domainsPOST /domainsReturns DKIM/SPF/DMARC DNS records to add.
GET /domainsGET /domains
POST /domains/:id/verifyPOST /domains/:id/verify
POST /api-keysPOST /api-keysPermission enum: full_access | sending_access (Resend uses full_access | sending_access — same names).
GET /api-keysGET /api-keys
DELETE /api-keys/:idDELETE /api-keys/:id
POST /audiencesPOST /listsDifferent name, same idea.
POST /broadcastsPOST /campaignsDifferent name, richer fields (rate caps, send windows, AI preview).
POST /webhooksPOST /webhooksSame shape; 3AVA Mail uses whsec_ prefix on signing secrets, like Resend.

Identical where they overlap:

EventResend3AVA Mail
Email sentemail.sentemail.sent
Email deliveredemail.deliveredemail.delivered
Email bouncedemail.bouncedemail.bounced
Email complainedemail.complainedemail.complained
Email openedemail.openedemail.opened
Email clickedemail.clickedemail.clicked
(none)campaign.sent
(none)campaign.delivered

3AVA Mail adds campaign.* events on top of the Resend set.

  • Base URL: https://mail.3ava.com/api vs https://api.resend.com.
  • Key prefix: am_ vs re_.
  • No idempotency-key SLA: 3AVA Mail honors Idempotency-Key for 24h (Resend honors it for 24h too — same window).
  • No Apple Mail Privacy Protection filtering on opens — open rates will read higher; clicks are the real engagement signal.
  • No delivery_delayed event: 3AVA Mail retries internally for 72h before marking as bounced; we don’t surface intermediate retry attempts.
  • Marketing: campaigns are first-class with built-in IP rotation, AI subject preview, warmup respect, and a daily_cap / per_minute_cap per campaign. Resend’s broadcasts are simpler.

The cheapest path:

  1. Set RESEND_API_URL=https://mail.3ava.com/api and RESEND_API_KEY=am_... in your environment.
  2. Re-verify your sending domain in 3AVA Mail (DNS records will be different — SPF, DKIM selector, DMARC).
  3. Send a test email and confirm it arrives.
  4. Re-register your webhooks with the new URL.
  5. Cut traffic over.

Existing data (sent emails, audiences) doesn’t migrate automatically. Suppression lists are re-built from incoming bounce/complaint signal once you start sending.