Eén API voor elke
e-mail die je verstuurt.
Transactioneel of marketing, één bericht of honderd, verstuurd via dezelfde Email API, met idempotentie, suppressie en webhooks ingebouwd. Stuur ruwe HTML mee of render je React Email-templates.
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.
Verstuur je al via SMTP?
Behoud je bestaande SMTP-client en verbind deze met de relay van Bird. Gebruik de SMTP-setuppagina voor regionale hosts, TLS-poorten en authenticatie. Als je applicatie berichten moet ontvangen en verwerken, begin dan met inbound e-mail.
Verstuur je eerste e-mail in vijf minuten.
Vanuit de taal die je al gebruikt.
Verzenden is de kern van de Bird Email API. Je eerste verzending kan naar een sandbox-adres (delivered@messagebird.dev), zodat je het hele platform (verzendingen, webhooks, suppressie) kunt testen voordat je een domein verifieert.
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"Vijf dingen die je niet zelf hoeft te bouwen.
Hetzelfde contract op elk Bird-kanaal.
- 01
Transactioneel + marketing.
Hetzelfde endpoint verstuurt een wachtwoordreset of een campagne. Een categorieveld bepaalt hoe suppressie en uitschrijvingen worden toegepast.
- 02
Templates op jouw manier.
Stuur ruwe HTML mee, render React Email-templates naar HTML in je app en verstuur het resultaat, of geef een opgeslagen template op en laat die voor je renderen. Je toolchain, ongewijzigd.
- 03
Batch tot 100.
Tot 100 onafhankelijke berichten per aanroep, elk met een eigen ontvanger en variabelen, als één geheel gevalideerd zodat je nooit half verstuurt.
- 04
Idempotent bij contract.
Elke verzending accepteert een idempotency-key, zodat een herhaald verzoek na een timeout het oorspronkelijke resultaat teruggeeft in plaats van dubbel te versturen.
- 05
Een webhook bij elke statuswijziging.
Geaccepteerd, afgeleverd, geopend, geklikt, gebounced, klacht ingediend. Elk HMAC-ondertekend, replay-beveiligd, idempotent, dezelfde envelope op elk kanaal.
Doe het eerste verzoek vanuit je applicatie.
Maak een account en API-key aan en volg daarna de verzendgids met een testontvanger.
Verstuur je nu ergens anders? Stap over in een middag.
De aanroep die je al doet verandert nauwelijks: wissel de client, behoud je templates, richt je webhooks op één endpoint. Migratiegidsen behandelen SendGrid, Amazon SES, Mailgun en 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>",
});
Eén bericht of honderd, één aanroep.
Batch tot 100 onafhankelijke berichten in één request, elk met een eigen ontvanger en variabelen. De batch wordt als geheel gevalideerd: één fout bericht weigert de aanroep met een 422, zodat je nooit half verstuurt. Eén idempotency-key maakt het hele verzoek veilig om opnieuw te proberen.
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`);
Koppel je eigen context aan elke verzending.
Tags zijn een eersteklas, filterbare dimensie: splits aflevering en engagement op campagne, template of experiment in de statistieken-API (tot 20 per bericht). Metadata is willekeurige JSON, tot 2 KB, die ongewijzigd meereist bij elke read en webhook, zodat je eigen ID's meereizen met het bericht.
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" },
});
Volg elk bericht door zijn hele levenscyclus.
Een verzending retourneert direct 202; het resultaat komt als webhook per ontvanger. Verifieer één handtekening, schakel op het type: dezelfde envelope die je al verwerkt voor SMS, voice en 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 en klachten werken de onderdrukkingslijst van ontvangers bij. Uitschrijvingen registreren een opt-outvoorkeur. Deze records worden gecontroleerd bij het verwerken van latere verzendingen.
email.acceptedDe verzending is geaccepteerd en wordt voorbereid voor aflevering.email.processedIn de wachtrij voor de mailserver van de ontvanger.email.deliveredDe mailserver van de ontvanger heeft het bericht geaccepteerd.email.deferredTijdelijk geweigerd, we proberen het opnieuw.email.bouncedPermanent mislukt: bouncetype en SMTP-code in de payload.email.openedDe ontvanger heeft het bericht geopend. Kan meer dan eens afgaan.email.clickedDe ontvanger heeft op een getrackte link geklikt.email.complainedDe ontvanger heeft het bericht als spam gemeld.email.unsubscribedDe ontvanger heeft zich uitgeschreven via een getrackte uitschrijflink.
Test elke uitkomst voordat je live gaat.
In de sandbox bepaalt het ontvangeradres het resultaat, niet je accountstatus. Stuur naar delivered@messagebird.dev voor een schone aflevering, of naar bounce@, softbounce@, deferred@, complaint@ en suppressed@ om elk foutpad door de echte pipeline en de echte webhooks te sturen. Geen domein te verifiëren, geen risico voor je reputatie. Productie is bewust afgeschermd: je verifieert eerst een domein, en een nieuw domein of dedicated IP doorloopt een warmup voordat het volledig volume draagt.
Duik dieper in de docs.
Lees de verzendgids, koppel e-mailevents en webhooks, of volg een migratiegids van SendGrid, SES, Mailgun of Resend als je overstapt van een andere provider.
Test het gedrag rondom het verzenden.
Een werkende verzendaanroep is het begin van een integratie. Oefen met bounces en klachten, verwerk dubbele webhookafleveringen en bepaal hoe je applicatie berichten plant of antwoorden ontvangt.
Ga verder met de workflow die je nodig hebt
Kies het product of de gids die past bij de volgende stap.
161%
Stijging in e-mail open rates zoals gerapporteerd in het klantverhaal van Zillow.
Gebouwd met Bird
Als de juiste woning verschijnt, moet de e-mail aankomen.
Zillow bracht tijdgevoelige woningmeldingen naar Bird, met de capaciteit om verzendpieken op te vangen en de analytics om betrokkenheid te begrijpen. Het team rapporteerde een stijging van 161% in open rates in de eerste maand.
Een migratie of hogere verzendvolumes gepland?
Neem contact op met salesVragen over het verzenden van e-mail
Kan ik zowel transactionele als marketing-e-mail versturen?
Wat gebeurt er als een verzoek een time-out heeft en ik het opnieuw probeer?
Kan ik een verzending inplannen voor later?
Kan ik bestanden bijvoegen?
Verbind verzending met de rest van je workflow
Praat met ons e-mailteam
Bouw je volgende e-mailintegratie.
Bespreek transactionele berichten, batchverzendingen en aflevergebeurtenissen. We helpen je bij het plannen van je integratie, verzendvolume en migratie.
Maak een account aan, maak vervolgens een API-key aan en verstuur een testbericht.
Schaal zonder
controle te verliezen.
Organiseer teams in werkruimtes, beheer API-toegang en traceer wijzigingen via auditlogs.
Audit log
Production- Workspace
- Production
- Resource
- Delivery agent
- ReadRead & write