Deliver transactional and marketing email from one API.
Send password resets, order receipts, and marketing campaigns from the same integration. Pass your own HTML, render React Email templates, or personalize stored templates at send time, with automatic bounce suppression, safe retries that prevent duplicate sends, and real-time delivery webhooks built in.
Already sending through SMTP?
Point your existing mailer or framework at Bird’s SMTP relay by swapping credentials without rewriting your application code. When your product also needs to route customer replies, support threads, or attachments back into your app, pair outbound sending with inbound email.
Send your first email in five minutes.
Test delivery before you configure DNS.
Build outbound email into your app with the Bird Email API using our SDKs, REST endpoint, CLI, or MCP. You can send your first test message to a built-in sandbox address right away, letting you verify webhook handling and bounce behavior in local development before you configure DNS records for your domain.
// Install the SDK
// npm install @messagebird/sdk
const msg = await bird.email.send({
from: { email: "onboarding@messagebird.dev", name: "Bird" },
to: ["delivered@messagebird.dev"],
subject: "Hello from Bird",
html: "<p>My first Bird email.</p>",
});
console.log(msg.id, msg.status); // "em_…", "accepted"Built-in safeguards for production email.
Ship reliable email delivery without building retry locks, bounce lists, or template pipelines from scratch.
- 01
Separate transactional and marketing rules.
Send password resets and promotional campaigns through one integration. Bird automatically enforces unsubscribe preferences on marketing mail and still delivers critical account alerts and receipts to your users.
- 02
Templates, attachments, and scheduled sends.
Render React Email components in your codebase, pass raw HTML directly, or populate stored templates with dynamic recipient data at send time. Attach PDFs or inline images and schedule future deliveries up to 30 days ahead without running your own cron queue.
- 03
Atomic batch sending for up to 100 messages.
Trigger up to 100 personalized emails in a single API call, each with its own recipient and template variables. Bird validates the entire batch upfront so a malformed entry rejects the request cleanly instead of leaving a partial send.
- 04
Safe network retries without duplicate emails.
Network timeouts happen in production. Attach a unique request key when your worker sends an email so automatic retries return the original send status instead of emailing your customer twice.
- 05
Signed webhooks for real-time delivery tracking.
Follow each message from server acceptance and inbox delivery to opens, link clicks, bounces, and spam complaints. Signed, replay-protected webhooks use the same event format across Bird Email, SMS, WhatsApp, and Voice.
Make the first request from your application.
Create an account and API key, then follow the sending guide with a test recipient.
Migrate from your current email provider in an afternoon.
Keep your existing HTML or React Email templates and swap the send call in a few lines of code. Step-by-step migration guides walk you through moving domains, webhooks, and suppression lists from SendGrid, Amazon SES, Mailgun, and Resend.
import sgMail from "@sendgrid/mail";
sgMail.setApiKey(process.env.SENDGRID_API_KEY!);
await sgMail.send({
from: "hello@yourdomain.com",
to: "delivered@messagebird.dev",
subject: "Your invite is ready",
html: "<p>Welcome aboard, Ada.</p>",
});
import { BirdClient } from "@messagebird/sdk";
const bird = new BirdClient({ apiKey: process.env.BIRD_API_KEY! });
await bird.email.send({
from: "hello@yourdomain.com",
to: ["delivered@messagebird.dev"],
subject: "Your invite is ready",
html: "<p>Welcome aboard, Ada.</p>",
});
Send up to 100 personalized emails in a single request.
Whether you are sending weekly product digests, billing reminders, or team notifications, you can batch up to 100 independent emails in one API call with per-recipient personalization. Bird validates the entire batch before accepting it, so an invalid message rejects the request cleanly instead of leaving a partial send that is hard to recover from.
import { BirdClient } from "@messagebird/sdk";
import { render } from "@react-email/render";
import { Digest } from "./emails/digest";
const bird = new BirdClient({ apiKey: process.env.BIRD_API_KEY! });
const messages = await Promise.all(
users.map(async (u) => ({
from: "Acme <hello@yourdomain.com>",
to: [u.email],
subject: "Your weekly digest",
html: await render(<Digest user={u} />),
})),
);
const { data: batch, error } = await bird.email
.sendBatch(messages)
.safe();
if (error) throw error;
console.log(`queued ${batch.data.length} messages`);
Correlate deliveries with your own database records and campaigns.
Label emails with up to 20 tags to break down delivery, open, and bounce rates by feature, onboarding flow, or campaign. You can also attach up to 2 KB of custom metadata such as an order ID, invoice number, or user ID, which returns unchanged on API reads and webhook events so your backend can match status updates without maintaining a lookup table.
await bird.email.send({
from: "Acme <hello@yourdomain.com>",
to: ["delivered@messagebird.dev"],
subject: "Your invite is ready",
html: "<p>Welcome aboard, Ada.</p>",
tags: [{ name: "campaign", value: "spring-2026" }],
metadata: { user_id: "u_2bX91", order_id: "ord_5512" },
});
Track delivery, bounces, and engagement in real time.
Know when a customer’s mail server accepts an email, when a mailbox is temporarily full, or why an address bounced. Verify a single webhook signature and handle events using the same payload structure across Email, SMS, Voice, and WhatsApp.
import { bird } from "@/lib/bird";
export async function POST(req: Request) {
const event = bird.webhooks.unwrap(
await req.text(),
Object.fromEntries(req.headers),
);
switch (event.type) {
case "email.delivered":
await markDelivered(event.data.email_id);
break;
case "email.bounced":
await flag(event.data.recipient, event.data.bounce_type);
break;
}
return new Response(null, { status: 204 });
}
Hard bounces and spam complaints automatically add the recipient to your suppression list, and unsubscribes record an opt-out preference so future sends respect recipient choices automatically.
email.acceptedBird accepted your send request and queued the message for processing.email.processedThe message is rendered and ready for handoff to the recipient’s mail server.email.deliveredThe recipient’s mail server accepted the message for delivery.email.deferredThe receiving server temporarily delayed acceptance; Bird automatically retries delivery.email.bouncedDelivery failed permanently, with the bounce classification and diagnostic reason included.email.openedThe recipient opened the email and loaded the tracking pixel.email.clickedThe recipient clicked a tracked link in the email body.email.complainedThe recipient marked the email as spam in their mailbox.email.unsubscribedThe recipient opted out via a tracked unsubscribe link or header.
Test bounces, deferrals, and complaints safely before launch.
Use Bird’s built-in sandbox addresses to simulate successful deliveries, hard bounces, soft bounces, temporary deferrals, spam complaints, and suppressed recipients without emailing real customers or risking your sender reputation. Each test send runs through the real event pipeline and triggers signed webhooks to your local or staging server. When you are ready for production, verify your sending domain and let managed warmup ramp traffic safely.
Explore the developer guides.
Follow the email sending guide to send HTML, templates, and attachments from your backend, configure delivery events and webhooks to sync message status with your database, or use a provider migration guide to switch from SendGrid, Amazon SES, Mailgun, or Resend.
Build the workflows around outbound email.
Once your application can send its first email, you can schedule future deliveries up to 30 days ahead, cancel queued messages before they go out, attach files or inline images, and rehearse bounce handling in staging.
Continue with the workflow you need
Guides and resources for testing, scheduling, and scaling your email integration.
161%
Increase in email open rates reported in Zillow’s customer story.
Built with Bird
When the right home appears, the email needs to arrive.
Zillow brought time-sensitive property alerts to Bird, with the capacity to handle sending surges and the analytics to understand engagement. Its team reported a 161% increase in open rates in the first month.
Planning a migration or a higher-volume send?
Contact SalesQuestions about sending email
Can I send both transactional and marketing email?
What happens if a request times out and I retry it?
Can I schedule a send for later?
Can I attach files?
Connect sending to the rest of your workflow
Talk to our email team
Build your next email integration.
Talk through transactional messages, batch sends and delivery events. We’ll help you plan your integration, sending volume and migration.
Create your account, then create an API key and send a test message.
Scale without
losing control.
Organize teams in workspaces, control API access, and trace changes through audit logs.