Kirim email
Satu API untuk setiap email yang Anda kirim.
Transaksional atau marketing, satu pesan atau seratus, dikirim melalui Email API yang sama, dengan idempotensi, supresi, dan webhook yang sudah terpasang. Kirim HTML mentah atau render template React Email Anda.
import { BirdClient } from "@messagebird/sdk";
import { render } from "@react-email/render";
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",
html: await render(<WelcomeEmail name="Ada" />),
}).safe();
if (error) throw error;
console.log(data.id);
// → "em_2bX91Yk8h..."
You can sign in any time at bird.com/login.
Your test API key is on your dashboard, ready to send.
Kirim email pertama Anda dalam lima menit.
Dari bahasa yang sudah Anda gunakan.
Pengiriman adalah inti dari Bird Email API. Pengiriman pertama Anda bisa ditujukan ke alamat sandbox (delivered@messagebird.dev), sehingga Anda dapat mencoba seluruh platform (pengiriman, webhook, supresi) sebelum memverifikasi domain.
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"Lima hal yang tidak perlu Anda bangun sendiri.
Kontrak yang sama di setiap kanal Bird.
- 01
Transaksional + marketing.
Endpoint yang sama mengirim reset kata sandi maupun campaign. Field category menentukan bagaimana supresi dan unsubscribe diterapkan.
- 02
Template sesuai cara Anda.
Kirim HTML mentah, render template React Email ke HTML di aplikasi Anda lalu kirim hasilnya, atau tentukan nama template tersimpan dan biarkan kami merendernya untuk Anda. Toolchain Anda, tidak berubah.
- 03
Batch hingga 100.
Hingga 100 pesan independen per panggilan, masing-masing dengan recipient dan variabelnya sendiri, divalidasi sebagai satu kesatuan sehingga Anda tidak akan pernah mengirim setengah jalan.
- 04
Idempoten secara kontrak.
Setiap pengiriman menerima sebuah idempotency key, sehingga permintaan yang diulang setelah kehabisan waktu mengembalikan hasil asli alih-alih mengirim ganda.
- 05
Webhook di setiap perubahan status.
Accepted, delivered, opened, clicked, bounced, complained. Masing-masing ditandatangani HMAC, terlindungi dari replay, idempoten, dengan envelope yang sama di setiap channel.
Sudah mengirim di tempat lain? Beralih dalam satu sore.
Panggilan yang sudah Anda gunakan nyaris tidak berubah: ganti client, pertahankan template Anda, arahkan webhook ke satu endpoint. Panduan migrasi mencakup SendGrid, Amazon SES, Mailgun, dan 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>",
});
Satu pesan atau seratus, dalam satu panggilan.
Kirim hingga 100 pesan independen dalam satu request, masing-masing dengan recipient dan variabel sendiri. Batch divalidasi sebagai satu kesatuan: satu pesan yang buruk akan menolak panggilan dengan 422, jadi Anda tidak pernah mengirim sebagian. Satu idempotency key membuat seluruh request aman untuk diulang.
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, { idempotencyKey: `digest-${runId}` })
.safe();
if (error) throw error;
console.log(`queued ${batch.data.length} messages`);
Lampirkan konteks Anda sendiri ke setiap pengiriman.
Tag adalah dimensi kelas satu yang dapat difilter: pilah delivery dan engagement berdasarkan campaign, template, atau eksperimen di stats API (hingga 20 per pesan). Metadata berupa JSON arbitrer, hingga 2 KB, yang dikembalikan utuh pada setiap pembacaan dan webhook, sehingga ID milik Anda sendiri ikut menyertai pesan.
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" },
});
Pantau setiap pesan sepanjang seluruh hidupnya.
Pengiriman langsung mengembalikan 202; hasilnya tiba sebagai webhook per recipient. Verifikasi satu signature, lakukan switch berdasarkan type: envelope yang sama yang sudah Anda tangani untuk SMS, voice, dan 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 bounce, complaint, dan unsubscribe juga otomatis memperbarui suppression list Anda, sehingga alamat yang buruk tidak pernah merugikan reputasi Anda dua kali.
email.acceptedPengiriman diterima dan sedang dipersiapkan untuk dikirim.email.processedDiantrikan untuk server email penerima.email.deliveredServer email penerima menerima pesan.email.deferredDitolak sementara, dan kami akan mencoba ulang.email.bouncedGagal permanen: tipe bounce dan kode SMTP ada di payload.email.openedPenerima membuka pesan. Bisa terpicu lebih dari sekali.email.clickedPenerima mengklik tautan yang dilacak.email.complainedPenerima melaporkan pesan tersebut sebagai spam.email.unsubscribedPenerima memilih keluar melalui tautan berhenti berlangganan yang dilacak.
Uji setiap hasil sebelum Anda go live.
Di sandbox, alamat penerima menentukan hasilnya, sehingga status akun Anda tidak perlu menentukan. Kirim ke delivered@messagebird.dev untuk pengiriman bersih, atau ke bounce@, softbounce@, deferred@, complaint@, dan suppressed@ untuk menjalankan setiap jalur kegagalan melalui pipeline nyata dan webhook nyata. Tidak perlu memverifikasi domain, tidak ada risiko terhadap reputasi Anda. Produksi sengaja dibatasi: Anda memverifikasi domain terlebih dahulu, dan domain baru atau IP dedicated melewati proses warmup sebelum menangani volume penuh.
Pelajari lebih dalam di dokumentasi.
Baca panduan pengiriman, hubungkan email event dan webhook, atau, jika Anda datang dari provider lain, ikuti panduan migrasi dari SendGrid, SES, Mailgun, atau Resend.
Bagian lain dari platform Email
Satu API, satu set kunci. Jelajahi kapabilitas lainnya.
Sekitar 40% email komersial dunia sudah berjalan di Bird.
Email transaksional dan marketing di atas infrastruktur yang telah kami jalankan selama satu dekade. Pengiriman hanyalah satu kemampuan dari Bird Email API: deliverability, dedicated IP, supresi, dan analitik sudah disertakan.