Send your app's emails with one API call
Sign-up codes, receipts and password resets, sent from your own domain.
What it does
Three things you get, in plain words.
Sends from your domain
Mail goes out as noreply@yourcompany.com. It is signed with your own domain key, so inboxes can tell it is really from you.
Schedules and batches
Send up to 100 emails in one request, or pick a time up to 30 days ahead. You can move or cancel a scheduled email.
Protects your reputation
Addresses that bounce or complain are blocked automatically. If problems pile up, we pause sending before your domain gets hurt.
One request, one email
Verify your domain once, then send with a single POST. The fields match Resend, so most code moves over unchanged.
curl https://api.mailbay.dev/v1/emails \
-H "Authorization: Bearer $MAILBAY_API_KEY" \
-H "Idempotency-Key: $(uuidgen)" \
-H "Content-Type: application/json" \
-d '{
"from": "Acme <noreply@acme.com>",
"to": ["ada@example.com"],
"subject": "Your receipt",
"html": "<p>Thanks for your order.</p>",
"text": "Thanks for your order."
}'
# {"id": "eml_01jc2m5x7t3v8q0w4r6y9z1a2b"}# To send later, add "scheduled_at" to the body above:
# "scheduled_at": "2026-10-20T09:00:00+05:30"
# Change your mind? Move it or cancel it while it waits.
curl -X PATCH https://api.mailbay.dev/v1/emails/eml_01jc2m9k4p7r2t5v8x0z3b6d9f \
-H "Authorization: Bearer $MAILBAY_API_KEY" \
-H "Content-Type: application/json" \
-d '{"scheduled_at": "2026-10-21T09:00:00Z"}'
curl -X POST https://api.mailbay.dev/v1/emails/eml_01jc2m9k4p7r2t5v8x0z3b6d9f/cancel \
-H "Authorization: Bearer $MAILBAY_API_KEY"# Already use the Resend SDK? Keep your code and change two settings:
RESEND_BASE_URL=https://api.mailbay.dev/v1
RESEND_API_KEY=mb_live_xxxxxxxxx # a Sukhovei Mail sending keyHost smtp.mailbay.dev
Port 465 (TLS) or 587 (STARTTLS)
Username mailbay
Password your Sukhovei Mail API keyThe Idempotency-Key header makes a retry safe: the same key within 24 hours returns the first result instead of sending twice.
Example: one email, followed from send to delivered
- RequestPOST /v1/emails from noreply@acme.comqueued
- Mail serverAccepted for ada@example.comsent
- InboxAda's mail server took itdelivered
If an address does not exist, the status becomes bounced and the address is blocked from now on.
Who it is for
Pick the page closest to what you are building.
Limits, honestly
What it does not do, so you can decide before you start.
- Your domain must be verified before you can send from it. Until then you can only email your own team and our test addresses.
- At most 50 recipients and 25 MB per message.
- No open or click tracking. We do not rewrite your links or add tracking pixels.
- No stored templates, no React email rendering and no topics. Send the finished HTML yourself.
- Mail goes out through Amazon SES on shared IP addresses. There are no dedicated IPs.
- New accounts can send 100 emails a day for the first 7 days. The free plan includes 3,000 emails a month and 3 domains.
Questions
Can I use my existing Resend code?
Mostly, yes. POST /v1/emails takes the same fields as Resend, and the Resend SDK works if you set RESEND_BASE_URL to https://api.mailbay.dev/v1. We tested sending and fetching an email this way. Fields we do not support, such as template or react, return a clear 400 error that names the field.
Do I need to run an SMTP server?
No. We run it. If your tool only speaks SMTP, such as Nodemailer or Supabase, use smtp.mailbay.dev on port 465 or 587 with the username mailbay and your API key as the password.
What happens when an email bounces?
If the address does not exist, or the person marks the email as spam, we add the address to your suppression list and stop sending to it. You can read the list and remove an entry if the address works again.
Is there a Node SDK?
There is one in our repository, but it is not on npm yet, so there is nothing to install for now. The REST API, the Resend SDK and SMTP all work today.
Try it on the free plan.
The free plan has 3 inboxes, 3,000 emails a month and 3 custom domains. No card needed.