E-Mails versenden

Eine API für jede E-Mail, die du sendest.

Eingerichtet in:
Cursor

Transaktional oder Marketing, eine Nachricht oder hundert, über dieselbe Email API versendet, mit Idempotenz, Suppression und Webhooks von Haus aus. Übergib rohes HTML oder rendere deine React-Email-Templates.

welcome.tsx
200 · 1.2s
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..."

Versende deine erste E-Mail in fünf Minuten.

In der Sprache, die du schon nutzt.

Der Versand ist das Herzstück der Bird Email API. Ihr erster Versand kann an eine Sandbox-Adresse (delivered@messagebird.dev) gehen, sodass Sie die gesamte Plattform (Versand, Webhooks, Unterdrückung) testen können, bevor Sie eine Domain verifizieren.

1
2
3
4
5
6
7
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"

Fünf Dinge, die du nicht selbst baust.

Derselbe Vertrag auf jedem Bird-Kanal.

  1. 01

    Transaktional + Marketing.

    Derselbe Endpoint sendet einen Passwort-Reset oder eine Kampagne. Ein Feld category bestimmt, wie Suppression und Abmeldungen angewendet werden.

  2. 02

    Templates nach deiner Wahl.

    Übergeben Sie rohes HTML, rendern Sie React Email-Templates in Ihrer App zu HTML und senden Sie das Ergebnis, oder benennen Sie ein gespeichertes Template und lassen Sie es für Sie rendern. Ihre Toolchain, unverändert.

  3. 03

    Batch bis zu 100.

    Bis zu 100 unabhängige Nachrichten pro Call, jede mit eigenem Empfänger und eigenen Variablen, als eine Einheit validiert, damit du nie halb sendest.

  4. 04

    Idempotent per Vertrag.

    Jeder Versand akzeptiert einen Idempotency-Key, sodass ein nach einem Timeout wiederholter Request das ursprüngliche Ergebnis zurückgibt, statt doppelt zu senden.

  5. 05

    Ein Webhook bei jeder Statusänderung.

    Accepted, delivered, opened, clicked, bounced, complained. Jeder einzelne HMAC-signiert, replay-geschützt, idempotent, derselbe Envelope auf jedem Kanal.

Sendest du schon woanders? Wechsle an einem Nachmittag.

Der Call, den du ohnehin schon machst, ändert sich kaum: tausch den Client, behalte deine Templates, richte deine Webhooks auf einen Endpoint. Die Migrationsguides decken SendGrid, Amazon SES, Mailgun und Resend ab.

sendgrid.ts
SendGrid
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>",
});
bird.ts
Bird
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>",
});

Eine Nachricht oder hundert, ein Call.

Bündele bis zu 100 unabhängige Nachrichten in einem Request, jede mit eigenem Empfänger und eigenen Variablen. Der Batch wird als Einheit validiert: eine fehlerhafte Nachricht lehnt den Call mit einem 422 ab, also sendest du nie halb. Ein einziger Idempotency-Key macht den gesamten Request sicher wiederholbar.

digest.ts
202 · batch
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`);

Häng deinen eigenen Kontext an jeden Versand.

Tags sind eine erstklassige, filterbare Dimension: schlüssele Zustellung und Engagement nach Kampagne, Template oder Experiment in der Stats-API auf (bis zu 20 pro Nachricht). Metadata ist beliebiges JSON, bis zu 2 KB, das bei jedem Read und Webhook unverändert mitläuft, sodass deine eigenen IDs an der Nachricht hängen bleiben.

tagged.ts
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" },
});

Verfolge jede Nachricht über ihren gesamten Lebenszyklus.

Ein Versand gibt sofort 202 zurück; das Ergebnis kommt als Webhook pro Empfänger. Verifiziere eine Signatur, verzweige über den type: derselbe Envelope, den du schon für SMS, Voice und WhatsApp verarbeitest.

app/api/webhooks/bird/route.ts
signed
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, Beschwerden und Abmeldungen aktualisieren außerdem automatisch deine Suppression-Liste, sodass dich eine schlechte Adresse nie zweimal Reputation kostet.

  • email.acceptedDer Versand wurde akzeptiert und wird für die Zustellung vorbereitet.
  • email.processedIn der Warteschlange für den Mailserver des Empfängers.
  • email.deliveredDer Mailserver des Empfängers hat die Nachricht akzeptiert.
  • email.deferredVorübergehend abgelehnt – wir versuchen es erneut.
  • email.bouncedDauerhaft fehlgeschlagen: Bounce-Typ und SMTP-Code in der Payload.
  • email.openedDer Empfänger hat die Nachricht geöffnet. Kann mehrfach ausgelöst werden.
  • email.clickedDer Empfänger hat auf einen getrackten Link geklickt.
  • email.complainedDer Empfänger hat die Nachricht als Spam gemeldet.
  • email.unsubscribedDer Empfänger hat sich über einen getrackten Abmeldelink abgemeldet.

Teste jedes Ergebnis, bevor du live gehst.

In der Sandbox bestimmt die Empfängeradresse das Ergebnis – nicht Ihr Kontostatus. Senden Sie an delivered@messagebird.dev für eine saubere Zustellung, oder an bounce@, softbounce@, deferred@, complaint@ und suppressed@, um jeden Fehlerpfad durch die echte Pipeline und die echten Webhooks zu durchlaufen. Keine Domain zu verifizieren, kein Risiko für Ihre Reputation. Die Produktionsumgebung ist bewusst geschützt: Sie verifizieren zuerst eine Domain, und eine neue Domain oder dedizierte IP durchläuft ein Warmup, bevor sie das volle Volumen übernimmt.

Geh tiefer in die Docs.

Lies den Sende-Guide, verkabele E-Mail-Events und Webhooks oder, wenn du von einem anderen Anbieter kommst, folge einem Migrationsguide von SendGrid, SES, Mailgun oder Resend.

Rund 40 % der kommerziellen E-Mails weltweit laufen bereits über Bird.

Transaktionale und Marketing-E-Mails auf einer Infrastruktur, die wir seit einem Jahrzehnt betreiben. Der Versand ist eine Funktion der Bird Email API: Zustellbarkeit, dedizierte IPs, Suppression und Analytics kommen gleich mit.

Starten Sie mit einem Kanal.
Fügen Sie die anderen hinzu, wenn Sie bereit sind.

Ein Test-API-Key steht Ihnen sofort zur Verfügung. Der Produktivzugang wird freigeschaltet, sobald Sie eine Zahlungsmethode hinzufügen und einen Absender verifizieren.

Sie nutzen Claude Code, Cursor oder Codex? Kopieren Sie einen Setup-Prompt und Ihr Agent installiert die Bird CLI und Skills für Sie. Wählen Sie Ihren:

Cursor