cURL
Senden Sie Ihre erste E-Mail nur mit curl: Exportieren Sie einen API-Schlüssel, senden Sie eine Nachricht per POST und rufen Sie sie per GET ab, um die Zustellung zu verfolgen. Das ist der rohe HTTP-Ablauf; alles, was die SDKs tun, beginnt hier.
1. API-Schlüssel exportieren
Erstellen Sie einen Schlüssel im Dashboard unter Developers > API keys (Ihre erste E-Mail senden führt Sie durch den Vorgang) und exportieren Sie ihn:
Codebeispiel
export BIRD_API_KEY="bk_us1_..."Das Regionspräfix wählt Ihren API-Host: bk_us1_-Schlüssel rufen https://us1.platform.bird.com auf, bk_eu1_-Schlüssel rufen https://eu1.platform.bird.com auf. Die Sendebeispiele verwenden us1; ändern Sie den Host, wenn Ihr Schlüssel eine andere Region hat.
2. Eine E-Mail senden
Senden Sie einen POST an /v1/email/messages – von unserer gemeinsamen Onboarding-Domain an die delivered@messagebird.dev-Sandbox-Adresse. Sie benötigen weder eine Domain-Verifizierung noch ein echtes Postfach. Wählen Sie für diesen Schnellstart den cURL-Tab.
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"msg = client.email.send(
from_={"email": "onboarding@messagebird.dev", "name": "Bird"},
to=["delivered@messagebird.dev"],
subject="Hello from Bird",
html="<p>My first Bird email.</p>",
)
print(msg.id, msg.status)package main
import (
"context"
"fmt"
"log"
"os"
bird "github.com/messagebird/bird-sdk-go"
"github.com/messagebird/bird-sdk-go/option"
)
func main() {
client, err := bird.NewClient(option.WithAPIKey(os.Getenv("BIRD_API_KEY")))
if err != nil {
log.Fatal(err)
}
msg, err := client.Email.Send(context.Background(), bird.EmailSendParams{
From: "onboarding@messagebird.dev",
To: []string{"delivered@messagebird.dev"},
Subject: "Hello from Bird",
HTML: "<p>My first Bird email.</p>",
})
if err != nil {
log.Fatal(err)
}
fmt.Println(msg.Id, *msg.Status)
}$message = $bird->email->send(
from: 'Bird <onboarding@messagebird.dev>',
to: ['delivered@messagebird.dev'],
subject: 'Hello from Bird',
html: '<p>My first Bird email.</p>',
);
echo $message->getId(), ' ', $message->getStatus();bird email send \
--category transactional \
--cc manager@acme.com \
--from 'Acme Support <noreply@acme.com>' \
--header X-Campaign=spring-2026 \
--html '<h1>Hi there 👋</h1>' \
--metadata '{"user_id":"usr_12345"}' \
--reply-to support@acme.com \
--subject 'Welcome aboard' \
--tag category=welcome \
--text 'Hi there' \
--to 'Jane Doe <delivered@messagebird.dev>' \
--track-clicks=falsecurl -X POST https://us1.platform.bird.com/v1/email/messages \
-H "Authorization: Bearer $BIRD_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"from": "onboarding@messagebird.dev",
"to": ["delivered@messagebird.dev"],
"subject": "Hello from Bird",
"html": "<p>My first Bird email.</p>"
}'Die API antwortet mit 202: Bird hat die E-Mail angenommen und stellt sie asynchron zu. Die *_count-Felder verfolgen Empfänger durch die Zustellstatus. In der ersten Antwort ist ein Empfänger akzeptiert und keiner zugestellt:
Codebeispiel
{
"id": "em_01ky7ma8y2es1s2akzk53tmjn0",
"status": "accepted",
"category": "marketing",
"from": { "email": "onboarding@messagebird.dev" },
"to": [{ "email": "delivered@messagebird.dev" }],
"subject": "Hello from Bird",
"accepted_count": 1,
"processed_count": 0,
"delivered_count": 0,
"deferred_count": 0,
"bounced_count": 0,
"complained_count": 0,
"rejected_count": 0,
"open_count": 0,
"click_count": 0,
"track_opens": true,
"track_clicks": true,
"created_at": "2026-07-23T13:58:20.866Z"
}Rohes HTTP hat kein SDK, das einen Idempotenzschlüssel für Sie erzeugt. Übergeben Sie zum Schutz vor doppelter Zustellung beim ersten Versuch einen Schlüssel und verwenden Sie ihn beim erneuten Versuchen wieder. Unter Idempotenz finden Sie ein Beispiel und die Wiedergabelimits.
3. Zustellung verfolgen
Rufen Sie die Nachricht per GET über ihre em_-ID ab und beobachten Sie, wie der Status von accepted über processed zu delivered wechselt. Wählen Sie erneut den cURL-Tab:
const msg = await bird.email.get("em_abc123");
msg.status; // "accepted" | "processed" | "delivered" | "bounced" | …
msg.delivered_count;
msg.bounced_count;message = client.email.get("em_abc123")
print(message.id, message.status, message.delivered_count)package main
import (
"context"
"fmt"
"log"
"os"
bird "github.com/messagebird/bird-sdk-go"
"github.com/messagebird/bird-sdk-go/option"
)
func main() {
client, err := bird.NewClient(option.WithAPIKey(os.Getenv("BIRD_API_KEY")))
if err != nil {
log.Fatal(err)
}
msg, err := client.Email.Get(context.Background(), "em_abc123")
if err != nil {
log.Fatal(err)
}
fmt.Println(*msg.Status, *msg.DeliveredCount)
}$message = $bird->email->get('em_01krdgeqcxet5s7t44vh8rt9mg');
echo $message->getStatus();bird email get <message-id>curl https://us1.platform.bird.com/v1/email/messages/em_01ky7ma8y2es1s2akzk53tmjn0 \
-H "Authorization: Bearer $BIRD_API_KEY"Da der Empfänger die delivered@messagebird.dev-Sandbox-Adresse ist, ist die Zustellung garantiert: Die Nachricht durchläuft die echte Pipeline von Bird, erreicht aber nie ein echtes Postfach.
Nächste Schritte
- E-Mail-API-Referenz: das vollständige Request- und Response-Schema.
- Authentifizierung: Schlüssel, Scopes und der Authorization-Header.
- Ihre erste E-Mail senden: derselbe Ablauf mit dem Dashboard und den SDKs.
- Sende-Domains: Verifizieren Sie Ihre eigene Domain für den Produktivversand.
Verwandte Ressourcen
Weiter mit der Dokumentation, Anleitungen und Beispielen zu diesem Thema. Die Ressourcen sind auf Englisch.
Anleitung ansehenGetting started with emailDas Konzept verstehenShould I use a Bird SDK or call the API directly?Die Funktion erkundenEmailDem Lernpfad folgenBuild your first integration
Übung ausprobieren und ein Implementierungs-Briefing erhalten