BIRD Email
The Email API for developers who ship the rest of the message too.
Transactional and marketing email on the same infrastructure that carries your SMS, voice, and WhatsApp. About 40% of the world's commercial email transits the Bird network — we've been at this a decade. 99.99% SLA on Email specifically.
import { BirdClient } from "@bird/sdk";
import { WelcomeEmail } from "./emails/welcome";
const bird = new BirdClient({ apiKey: process.env.BIRD_API_KEY! });
const { data, error } = await bird.email.send({
from: "Bird <hello@bird.com>",
to: ["ada@example.com"],
subject: "Your invite is ready",
react: <WelcomeEmail name="Ada" />,
}).safe();
if (error) throw error;
console.log(data.id);
// → "email_2bX91Yk8h..."You can sign in any time at bird.com/login.
Your test API key is on your dashboard, ready to send.
5 minutes from npm install to first send
Send an email from the language you already use.
SDKs in every major runtime. The first send goes to a sanctioned test recipient (delivered@bird.dev) so you can ship a CI check before you verify a domain.
import { BirdClient } from "@bird/sdk";
const bird = new BirdClient({ apiKey: process.env.BIRD_API_KEY! });
const { data, error } = await bird.email.send({
from: "you@yourdomain.com",
to: ["delivered@bird.dev"],
subject: "Hello from Node",
html: "<p>It works.</p>",
}).safe();Ten parts of email that
aren't your problem anymore.
Deliverability and operational primitives,
named and audit-able.
- 01
Signed at the edge.
DKIM, SPF, DMARC, and BIMI signed for any verified sending domain.
- 02
Proactive blocklist tracking.
Live monitoring across the major DNSBLs; alerts before the open rate dips.
- 03
Managed dedicated IPs.
Provisioned per account, warmed automatically over 21 days, hot-swapped if a sender drops a reputation.
- 04
Dynamic suppression list.
Bounces, complaints, and unsubscribes suppress the recipient automatically and reversibly.
- 05
DNS verification in 60s.
Add a domain, paste the records, hit verify. Most verifications resolve in under a minute.
- 06
React Email templates.
Server-rendered in the SDK. Pass a React component as the body; we render the MIME at send time.
- 07
Public share link per email.
Every sent email gets a 48-hour public URL for screenshots, tickets, and bug reports.
- 08
Forty-two deliverability metrics.
Per-domain, per-ISP, per-IP — surfaced in the dashboard and via the diagnostics API.
- 09
Inbound parsing.
HMAC-signed webhooks per recipient address. Parse replies; build threaded apps.
- 10
Batch send up to 500.
Distinct recipients per call, each with its own variables. One idempotency key covers the batch.
Why we build email
Because your verification codes shouldn't live in a different vendor than your delivery receipts.
Email isn't its own product; it's one channel in a flow. Auth codes start as email and fall back to SMS. Receipts ship by WhatsApp when the customer prefers it. Bird Email is the one whose API, webhooks, and idempotency contract match every other channel — because the same engineering team built them all, on the same wires we've been running for a decade.
import { BirdClient } from "@bird/sdk";
import { WelcomeEmail } from "./emails/welcome";
const bird = new BirdClient({ apiKey: process.env.BIRD_API_KEY! });
const { data, error } = await bird.email.send({
from: "Bird <hello@bird.com>",
to: ["ada@example.com"],
subject: "Your invite is ready",
react: <WelcomeEmail name="Ada" />,
}).safe();
if (error) throw error;
console.log(data.id);
// → "email_2bX91Yk8h..."You can sign in any time at bird.com/login.
Your test API key is on your dashboard, ready to send.
Every state change is a webhook.
HMAC-signed payloads, replay-protected, idempotent. The same envelope on every Bird channel — learn one, you've learned them all.
{
"type": "email.delivered",
"id": "evt_3nB91x...",
"created_at": "2026-05-19T15:42:01.221Z",
"data": {
"email_id": "email_2bX91Yk8h",
"from": "hello@bird.com",
"to": "ada@example.com",
"subject": "Your invite is ready",
"isp": "gmail",
"latency_ms": 1842
}
}Retry schedule: 5s, 30s, 5m, 30m, 2h, 6h, 12h. Dead-letter after the final attempt; every dead-lettered event is replayable from the dashboard or API.
email.queuedAccepted by the API and queued for send.email.sentHanded off to the receiving MTA.email.deliveredThe receiving MTA accepted the message.email.openedTracking pixel fetched (if tracking enabled).email.clickedA tracked link was clicked.email.bouncedSoft or hard bounce — bounce code in the payload.email.complainedRecipient marked the message as spam.email.unsubscribedRecipient hit the list-unsubscribe header.email.failedPermanent failure before send.
If you've integrated email, you've integrated SMS.
Same auth model, same idempotency contract, same error envelope, same webhook shape. The difference is what each one does — not how you call it.
Verified domain, signed at the edge, suppression-aware. Render React or pass raw HTML.
await bird.email.send({
from: "hello@bird.com",
to: ["ada@example.com"],
subject: "Your code",
html: `<p>Code: ${code}</p>`,
});SMS
Same envelope, same idempotency, same error type registry. The transport is the only difference.
await bird.sms.send({
from: "Bird",
to: "+14155550172",
text: `Your code is ${code}.`,
});