cURL
Envoyez votre premier e-mail avec curl uniquement : exportez une clé API, faites un POST d'un message, puis un GET pour suivre sa livraison. C'est le flux HTTP brut ; tout ce que font les SDK commence ici.
1. Exportez votre clé API
Créez une clé dans le tableau de bord sous Developers > Clés API (Envoyez votre premier e-mail détaille la procédure), puis exportez-la :
Exemple de code
export BIRD_API_KEY="bk_us1_..."Le préfixe de région sélectionne votre hôte API : les clés bk_us1_ appellent https://us1.platform.bird.com, et les clés bk_eu1_ appellent https://eu1.platform.bird.com. Les exemples d'envoi utilisent us1 ; changez l'hôte si votre clé a une autre région.
2. Envoyez un e-mail
Faites un POST vers /v1/email/messages, en envoyant depuis notre domaine d'intégration partagé vers l'adresse sandbox delivered@messagebird.dev. Vous n'avez besoin ni de vérification de domaine ni d'une vraie boîte mail. Sélectionnez l'onglet cURL pour ce guide de démarrage.
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>"
}'API répond avec 202 : Bird a accepté l'e-mail et le livre de manière asynchrone. Les champs *_count suivent les destinataires à travers les états de livraison. Dans la réponse initiale, un destinataire est accepté et aucun n'est livré :
Exemple de code
{
"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"
}Le HTTP brut n'a pas de SDK pour générer une clé d'idempotence à votre place. Pour vous protéger lors d'une nouvelle tentative, fournissez une clé dès le premier appel et réutilisez-la en cas de réessai. Consultez Idempotence pour un exemple et les limites de rejeu.
3. Suivez la livraison
Faites un GET du message par son ID em_ et observez le statut passer de accepted à processed puis à delivered. Sélectionnez à nouveau l'onglet cURL :
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"Comme le destinataire est l'adresse sandbox delivered@messagebird.dev, la livraison est garantie : le message passe par le pipeline réel de Bird mais n'atteint jamais une vraie boîte mail.
Étapes suivantes
- Référence API e-mail : le schéma complet de requête et de réponse.
- Authentification : clés, scopes et en-tête Authorization.
- Envoyez votre premier e-mail : le même flux avec le tableau de bord et les SDK.
- Domaines d'envoi : vérifiez votre propre domaine pour l'envoi en production.
Ressources associées
Poursuivez avec la documentation, les guides et les exemples sur ce sujet. Les ressources sont en anglais.
Regarder le guideGetting started with emailComprendre le conceptShould I use a Bird SDK or call the API directly?Explorer la fonctionnalitéEmailSuivre le parcours d'apprentissageBuild your first integration
Essayez la pratique et obtenez un guide d'implémentation