Skip to content

A Resend alternative that takes the same request body

Resend is a polished sending API. People look elsewhere when received mail eats into the sending quota, when 30 days of data is not enough, or when they want agent and support inboxes next to app email.

Updated 4 min read

On this page (6)

Most people reading this already send with Resend and like it. This page is about the moments they start looking, when staying is the better call, and a migration that keeps your request body. The side by side table is on Mailbay vs Resend, and the other switch guides are on the alternatives index.

Why people look for an alternative

  • Received mail uses the sending quota. “Each received email counts as 1 email against your daily and monthly limits” [2]. An app that receives replies, or an agent with an inbox, spends its sending allowance on mail it did not send.
  • 30 days of data. Resend keeps email data for 30 days on every plan [2].
  • A big step from free to paid. Free is 3,000 emails a month and 100 a day; the next plan is Pro at $20 a month, and Resend says there is no plan in between [1].
  • One request rate for everyone. 10 requests per second per team [3], the same on every plan [1].

When to stay with Resend

  • You rely on stored templates, React Email rendering or broadcasts. Mailbay takes HTML and text you render yourself. It does send batches of up to 100 and scheduled email, like Resend.
  • You want an SDK in your language. Resend has official SDKs for Node.js, Python, PHP, Ruby, Go, Java, Rust, .NET and more [6]. Mailbay has one, for Node and edge runtimes, coming to npm; the Resend Node SDK also works against Mailbay for sending.
  • Large attachments. Resend accepts emails up to 40 MB after encoding [5]; Mailbay's limit is 25 MB.
  • Inboxes on your own domain are enough. Resend now has inboxes with threads, in private beta, on your verified domains [4]. If you are in that beta and it covers your support mail, you may not need a second product.
  • Track record. Resend is established. Mailbay is in private beta, and our sending IPs are warming up.

How Mailbay differs

Mailbay is in private beta and free while it runs. The Mailbay prices below are the planned plans from our pricing page; billing is not live yet.

  • Receiving is not metered. Plans count sent recipients only, so inboxes for agents, replies and support mail cost nothing extra.
  • Mail is kept until you delete it, unless you set a retention period for the workspace.
  • Inboxes for agents and tests, not only people. A private mailbay.email domain with a Catch-all, a wait endpoint that returns one time codes and links, an MCP server, and IMAP for mail apps.
  • A cheaper first paid step, planned. Pro is planned at $9 a month for 50,000 emails and 25 inboxes.

Other options

If you only send, Postmark and Amazon SES are the usual alternatives, and Postmark's track record for transactional mail is long; we compare it in Mailbay vs Postmark. If your reason to leave is inbound mail for AI agents, look at AgentMail too, and read our AgentMail alternative page for how it differs.

Moving from Resend

The send request does not change. Mailbay's POST /v1/emails accepts Resend's documented fields and the Idempotency-Key header; we ran Resend's own examples and its Node SDK against it, as described on the comparison page. What changes is around it:

  1. Verify the domain first. Until it is verified, Mailbay refuses the send with sender_not_verified and the commands that fix it, as in the capture below. Resend's DKIM record can stay while you switch, since the selectors differ; see the records Mailbay asks for. Once it is verified, send one message to the free deliverability test to check SPF, DKIM and DMARC before you move real traffic.
  2. Remove the fields Mailbay does not support: template, react, topic_id and attachment path URLs. They are refused with unsupported_field and a fix, never silently dropped. scheduled_at and POST /emails/batch carry over as they are; see the Emails API.
  3. Swap the base URL and key: https://api.mailbay.dev/v1 and a Mailbay sending key.
  4. Map the webhook events. Resend's email.delivered, email.delivery_delayed, email.bounced, email.complained, email.failed and email.received [7] become message.delivered, message.deferred, message.bounced, message.complained, message.failed and message.received. Resend signs with svix-id, svix-timestamp and svix-signature [8]; Mailbay with webhook-id, webhook-timestamp and webhook-signature.
  5. Move inbound mail. If you receive with Resend, save what you need through its list of received emails [9], then point the receiving domain's MX at Mailbay. Mail then lands in inboxes with threads instead of arriving only as webhooks.
Two Resend shaped requests sent to Mailbay: a template field refused with unsupported_field, and an unverified sender refused with sender_not_verified
Resend shaped requests sent to Mailbay's POST /v1/emails: fields Mailbay does not support are refused with a fix instead of being dropped, and a sender domain must be verified first.
.env for the Resend Node SDK
RESEND_BASE_URL=https://api.mailbay.dev/v1
RESEND_API_KEY=mb_live_xxxxxxxxx   # a Mailbay sending key

Calling the API from Python instead? The Python integration sends and receives with plain requests. Bounces and deferrals come back with the remote server's SMTP reply; the SMTP error code reference explains the common ones.

Sources, read on October 14, 2026

  1. [1]Resend pricing: resend.com/pricing
  2. [2]Resend, account quotas and limits: resend.com/docs/knowledge-base/account-quotas-and-limits
  3. [3]Resend, rate limit: resend.com/docs/api-reference/rate-limit
  4. [4]Resend, create inbox (private beta): resend.com/docs/api-reference/inboxes/create-inbox
  5. [5]Resend, attachments: resend.com/docs/dashboard/emails/attachments
  6. [6]Resend, SDKs: resend.com/docs/sdks
  7. [7]Resend, webhook event types: resend.com/docs/webhooks/event-types
  8. [8]Resend, verify webhook requests: resend.com/docs/webhooks/verify-webhooks-requests
  9. [9]Resend, list received emails: resend.com/docs/api-reference/emails/list-received-emails

Prices change. If something here is out of date or wrong, email hello@mailbay.dev and we will fix it.

For a team weighing the switch, Mailbay for SaaS teams shows sending and the support inbox side by side.

Questions

Is Mailbay a drop in replacement for Resend?

For sending, close to it: POST /v1/emails accepts Resend's documented request body and answers with an id, scheduled_at and batches of up to 100 work, and the official Resend Node SDK works when RESEND_BASE_URL points at Mailbay. Stored templates and React rendering are not supported and are refused rather than ignored.

Does received mail count against my Mailbay plan?

No. Mailbay's plans count sent recipients only. Resend counts each received email as one email against its daily and monthly limits.

Can I keep my Resend webhooks code?

The shape is close: both send an id, a timestamp and a signature header with each delivery. The names differ, so update the code: Resend sends svix- headers and email.* events, Mailbay sends webhook- headers and message.* events.

Is Mailbay cheaper than Resend?

Mailbay is free during the beta. Its planned Pro plan is $9 a month for 50,000 emails, against $20 for Resend Pro. Billing is not live yet, so compare again when it is.

Join the beta

Mailbay is in private beta and free while the beta runs: inboxes, sending, your own domains and MCP. We invite people in small batches and read every note on the form.