Engagez vos clients dans le monde entier avec l<highlight>API WhatsApp</highlight>

Connectez vos équipes marketing, service client et opérations avec vos clients sur l'application de messagerie la plus populaire au monde.

send-notification.ts
202 · 480ms
import { BirdClient } from "@messagebird/sdk";

const bird = new BirdClient({
  apiKey: process.env.BIRD_API_KEY!,
});

const msg = await bird.whatsapp.send({
  to: "+15551234567",
  template: {
    slug: "bird_delivery_update",
    components: [{ type: "body", parameters: [
      { type: "text", name: "ref",  text: "#4821" },
      { type: "text", name: "date", text: "Wednesday" },
    ] }],
  },
});

console.log(msg.id, msg.status);
// → "wam_01krdgeqcxet5s7t44vh8rt9mg", "accepted"
Reminder: you have an appointment on 3 Sep at 14:30. We look forward to seeing you.9:42 AM
Reschedule
Your order #4821 is out for delivery, arriving Wednesday. Thanks for shopping with us.9:43 AM
Your subscription renews on 3 Sep for €12.00. No action is needed.9:44 AM
View plan

5 minutes entre npm install et votre premier envoi

Envoyez un WhatsApp dans le langage que vous utilisez déjà.

Des SDK dans chaque runtime majeur. Le premier envoi s'effectue via un modèle géré par Bird comme bird_delivery_update, déjà approuvé par Meta et sélectionnant automatiquement son expéditeur — vous voyez un vrai message arriver avant même d'en créer un vous-même.

1
2
3
4
5
6
7
8
const msg = await bird.whatsapp.send({
  to: "+15551234567",
  template: {
    slug: "bird_otp",
    components: [{ type: "body", parameters: [{ type: "text", text: "123456" }] }],
  },
});
console.log(msg.id, msg.status);

Huit choses que nous gérons entre vous et Meta.

WhatsApp est contrôlé : un modèle approuvé, un destinataire ayant donné son consentement, une entreprise vérifiée. Ces conditions ne changent pas. Votre fournisseur décide si elles apparaissent dans votre code ou sont enfouies dans un tableau de bord.

  1. 01

    Fournisseur officiel de solutions Meta Business (BSP)

    Relation directe avec Meta depuis la création de l'API. Aucun transit revendu, aucun intermédiaire tiers.

  2. 02

    Gestion des modèles

    Consultez le catalogue et le verdict de Meta par langue depuis le CLI ou les outils MCP. La création et la soumission se font dans le tableau de bord.

  3. 03

    Des modèles dans toutes les langues

    Un identifiant, plusieurs langues. Spécifiez-en une lors de l'envoi, ou laissez la langue par défaut du modèle s'appliquer.

  4. 04

    Boutons et carrousels

    Boutons lien, réponse rapide, numéro de téléphone et copie de code, ainsi que des carrousels de 2 à 10 cartes.

  5. 05

    Médias et contenu enrichi

    Images, vidéo, audio, stickers, documents et localisation, chacun dans un seul champ d'envoi.

  6. 06

    Tags et métadonnées à chaque envoi

    Les tags deviennent des dimensions de filtre et d'analyse ; les métadonnées sont renvoyées dans chaque webhook.

  7. 07

    Webhooks de messages entrants

    Événements signés par HMAC pour les messages entrants, les accusés de réception et les confirmations de lecture.

  8. 08

    Plus de 3 milliards d'utilisateurs sur un seul endpoint

    Plus de trois milliards d'utilisateurs WhatsApp mensuels accessibles depuis un seul appel bird.whatsapp.send.

Pourquoi nous développons WhatsApp

Nous avons été l'un des premiers BSP WhatsApp. Nous sommes toujours l'un des rares à coder avec vous.

WhatsApp est contrôlé. Vous avez besoin d'un modèle approuvé ; vous avez besoin d'une fenêtre de service client ouverte pour envoyer autre chose qu'un modèle ; vous avez besoin d'une vérification Meta de votre entreprise. Cela ne change pas et ne changera pas. Ce qui change, c'est si votre BSP rend ces contrôles plus faciles ou plus difficiles à franchir : en les exposant dans votre code, via des webhooks auxquels vous pouvez vous abonner, dans des erreurs qui indiquent précisément le problème. Nous avons choisi la première option.

send-notification.ts
202 · 480ms
import { BirdClient } from "@messagebird/sdk";

const bird = new BirdClient({
  apiKey: process.env.BIRD_API_KEY!,
});

const msg = await bird.whatsapp.send({
  to: "+15551234567",
  template: {
    slug: "bird_delivery_update",
    components: [{ type: "body", parameters: [
      { type: "text", name: "ref",  text: "#4821" },
      { type: "text", name: "date", text: "Wednesday" },
    ] }],
  },
});

console.log(msg.id, msg.status);
// → "wam_01krdgeqcxet5s7t44vh8rt9mg", "accepted"

Chaque changement d'état est un webhook.

Payloads signés par HMAC, protégés contre le rejeu, idempotents. La même enveloppe sur chaque canal Bird : apprenez-en un, vous les connaissez tous.

POST /webhooks/bird
signed
{
  "type": "whatsapp.read",
  "timestamp": "2026-05-19T15:42:08.114Z",
  "data": {
    "whatsapp_id":  "wam_01krdgeqcxet5s7t44vh8rt9mg",
    "workspace_id": "ws_01krdgeqcxet5s7t44vh8rt9mg",
    "direction":    "outbound",
    "from":         { "phone_number": "+15557654321" },
    "to":           { "phone_number": "+15551234567" },
    "tags":         [{ "name": "campaign", "value": "order-updates" }],
    "metadata":     { "order_id": "BRD-49217" }
  }
}

Calendrier de réessai : 5 s, 5 min, 30 min, 2 h, 5 h, puis 10 h deux fois. Après la dernière tentative, la livraison échoue définitivement, et la relecture permet de la récupérer depuis le tableau de bord ou l'API.

  • whatsapp.acceptedAccepté par l'API et mis en file d'attente pour envoi à Meta.
  • whatsapp.sentTransmis à l'API Cloud de Meta.
  • whatsapp.deliveredMeta confirme que le message est arrivé sur l'appareil du destinataire.
  • whatsapp.readLe destinataire a ouvert le message (si les accusés de lecture sont activés).
  • whatsapp.rejectedRefusé avant l'envoi, et non facturé : code de raison dans le payload.
  • whatsapp.failedÉchec permanent : code de raison dans le payload.
  • whatsapp.receivedMessage entrant d'un utilisateur WhatsApp.

Joindre le même client par SMS, c'est le même appel, un champ plus loin.

Même client, même authentification, même enveloppe d'erreur, même structure de webhook. Ce qui change, c'est le payload : WhatsApp transporte un modèle approuvé par Meta, SMS transporte du texte. Les tags et métadonnées accompagnent les deux, donc un seul jeu de tableaux de bord couvre la paire.

WhatsApp

whatsapp
await bird.whatsapp.send({
  to: "+15551234567",
  template: {
    slug: "bird_delivery_update",
    language: "en",
    components: [{ type: "body", parameters: [
      { type: "text", name: "ref",  text: "BRD-49217" },
      { type: "text", name: "date", text: "10 Jul 2026" },
    ] }],
  },
});

Un modèle géré par Bird : approuvé par Meta, disponible dans plus de 70 langues, et il sélectionne automatiquement son expéditeur. Les valeurs des variables sont transmises en tant que composants.

SMS

sms
await bird.sms.send({
  from:     "Bird",
  to:       "+15551234567",
  text:     `Your order BRD-49217 has shipped.`,
  category: "transactional",
});

Le même verbe sur l'autre canal : texte libre plus une catégorie, sans approbation de modèle à prévoir.

Un tarif par message, frais Meta inclus.

Tarification à l'usage. Chaque tarif couvre les frais Meta et les nôtres en un seul montant, et suit le pays de destination et la catégorie de message. Aucun frais par utilisateur et rien qui exige un engagement annuel.

Commencez avec un seul canal.
Ajoutez les autres quand vous êtes prêt.

Une clé API de test est disponible immédiatement. L'accès production se débloque dès que vous ajoutez un moyen de paiement et vérifiez un expéditeur.

Vous utilisez Claude Code, Cursor ou Codex ? Copiez un prompt de configuration et votre agent installe la CLI Bird et les compétences pour vous. Choisissez le vôtre :

Cursor