Skip to content

Drop-in Resend SDK

The cleanest way to integrate 3AVA Mail is to point the official Resend SDK at 3AVA Mail’s base URL. Every SDK call works without modification.

3AVA Mail’s transactional surface (/emails, /domains, /api-keys, webhooks) is wire-compatible with Resend’s. Same paths, same request bodies, same response shapes, same webhook event names. See Resend compatibility for the full table.

import { Resend } from "resend";
const resend = new Resend(process.env.AMDY_API_KEY, {
baseUrl: "https://mail.3ava.com/api",
});
  • emails.send / Emails.send
  • emails.create (alias for send)
  • emails.get
  • emails.list
  • domains.create, list, get, verify, delete
  • apiKeys.create, list, delete
  • batch.send

What’s 3AVA-specific (not in Resend SDK)

Section titled “What’s 3AVA-specific (not in Resend SDK)”

For these, call the 3AVA Mail endpoints directly:

  • Campaigns (/campaigns/*)
  • Lists with CSV import (/lists/*)
  • IP pools / warmup (/pools/*)
  • Inbound replies (/inbound)

Example with the Resend SDK + a raw fetch call for the 3AVA-only endpoint:

import { Resend } from "resend";
const resend = new Resend(process.env.AMDY_API_KEY, {
baseUrl: "https://mail.3ava.com/api",
});
// Resend SDK call
await resend.emails.send({...});
// Raw fetch for 3AVA-specific campaigns API
await fetch("https://mail.3ava.com/api/campaigns", {
method: "POST",
headers: {
Authorization: `Bearer ${process.env.AMDY_API_KEY}`,
"Content-Type": "application/json",
},
body: JSON.stringify({...}),
});

Often a one-line change:

const resend = new Resend(process.env.RESEND_API_KEY);
const resend = new Resend(process.env.AMDY_API_KEY, {
baseUrl: "https://mail.3ava.com/api",
});

After that, re-verify your sending domain in 3AVA Mail (the DNS records will differ from Resend’s — different SPF include, different DKIM selector, different DMARC reporting address) and re-register your webhooks.