Move a project to Minket

A project on the resend SDK moves by changing two environment variables; its code stays as it is.

RESEND_BASE_URL=https://api.minket.com
RESEND_API_KEY=minket_live_<your key>
The two variables the resend SDK reads.
import { Resend } from "resend";

const resend = new Resend(process.env.RESEND_API_KEY);

await resend.emails.send({
  from: "receipts@mail.fernbank.example",
  to: "rui.okafor@example.com",
  subject: "Your receipt for order 10452",
  html: "<p>Thanks, Rui.</p>",
});
A send, as the resend SDK writes it.

5 SDK versions, held by contract tests

Each version runs against the API, error names and statuses included.

Pinned
6.10.0, 6.12.4, 6.17.1, 6.22.1
Latest
6.34.1

Error handling keeps working

Paths keep Resend's spelling and answers keep its shapes, errors included.

{
  "statusCode": 422,
  "message": "Missing `to` field.",
  "name": "validation_error"
}
A missing field, as the resend SDK reads it

Webhooks verify with the code you have

Deliveries are signed the svix way Resend uses, so resend.webhooks.verify accepts them with the new endpoint's secret.

svix-id  svix-timestamp  svix-signature
The headers every delivery carries

One project at a time

Each step can be undone by putting the two variables back, until the last one.

  1. Add the domain. Add it to Minket while it stays on Resend: the DKIM selectors and the bounce. host differ, so both sets of records stay valid.
  2. Try the preview. Set the two variables with a minket_test_ key on a preview deployment and run every email path.
  3. Swap production. Set the live key and the new webhook secret, then send one real email.
  4. Move inbound mail. Point the domain's MX record at Minket's receiving record.
  5. Bring the suppressions. Add the addresses already suppressed with POST /v1/suppressions and reason: "imported".
  6. Remove Resend's records. After a week of clean sending, remove Resend's records and the domain from Resend.

Before you move

Questions

Do I have to change code?

Not on resend 6.12.4 or later: setting the two variables is enough.

Do webhook secrets carry over?

No. Add each endpoint in Minket and use the secret it shows you.