Coming Soon

L<highlight>API WhatsApp Business,</highlight> sans les tracas des BSP.

Fournisseur officiel de solutions Meta Business depuis la création de l'API. Approbation des modèles, fenêtres de session, médias, messages interactifs — tout est géré. Plus de deux milliards d'utilisateurs WhatsApp par mois, accessibles depuis un seul endpoint identique à tous les autres canaux Bird.

order-shipped.ts
200 · 480ms
import { BirdClient } from "@bird/sdk";

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

const { data, error } = await bird.whatsapp.send({
  to:       "+15005550009",
  template: "order_shipped",
  locale:   "en_US",
  variables: {
    customer_name:   "Ada",
    order_id:        "BRD-49217",
    tracking_url:    "https://track.bird.dev/49217",
    eta:             "Thursday, May 21",
  },
}).safe();

if (error) throw error;
console.log(data.id);
// → "wa_msg_8nB91Yk3p..."

5 minutes entre npm install et le premier envoi

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

SDK disponibles dans tous les principaux environnements d'exécution. Le premier envoi est adressé à un destinataire de test autorisé (+15005550009) avec un modèle pré-approuvé, pour que vous puissiez intégrer une vérification CI avant même de soumettre votre premier modèle à approbation.

1
2
3
4
5
6
7
8
9
import { BirdClient } from "@bird/sdk";

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

const { data, error } = await bird.whatsapp.send({
  to:       "+15005550009",
  template: "hello_world",
  locale:   "en_US",
}).safe();

Dix choses que les BSP vous cachent. Pas nous.

WhatsApp est contrôlé par Meta. Le choix du BSP détermine si les contraintes apparaissent dans votre code ou sont dissimulées dans un tableau de bord. Nous avons choisi le code.

  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

    Soumettez, suivez l'état d'approbation et recevez un webhook dès que Meta approuve ou rejette.

  3. 03

    Gestion de la fenêtre de session

    Le SDK vous indique si un message libre ou un modèle est autorisé avant l'envoi.

  4. 04

    Messages interactifs

    Boutons, listes, fiches produit et WhatsApp Flows — déclarés dans le même payload.

  5. 05

    Médias et contenu enrichi

    Images, vidéos, documents, localisation, contacts, aperçus de liens, réactions et réponses.

  6. 06

    WhatsApp Flows

    Formulaires multi-étapes intégrés à l'application avec validation backend, définis en JSON, exécutés par Meta.

  7. 07

    Publicités Click-to-WhatsApp

    Intégration avec Meta Ads Manager pour que les clics publicitaires ouvrent une conversation à laquelle vous pouvez répondre.

  8. 08

    Basculement cross-canal

    Ajoutez fallback: "sms" à n'importe quel envoi — l'expiration de session bascule automatiquement vers SMS.

  9. 09

    Webhooks de messages entrants

    Événements signés HMAC pour les messages entrants, les accusés de lecture, les réactions et l'état des modèles.

  10. 10

    2 Md+ d'utilisateurs sur un seul endpoint

    Plus de deux milliards d'utilisateurs WhatsApp par mois accessibles via un seul appel bird.whatsapp.send.

Why we build 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é, d'une fenêtre de session avec opt-in et d'une vérification Meta Business. Ça ne change pas — et ça ne changera pas. Ce qui change, c'est si votre BSP facilite ou complique le passage de ces étapes — en les exposant dans votre code, via des webhooks auxquels vous pouvez vous abonner, dans des erreurs qui disent exactement ce qui ne va pas. Nous avons choisi la première option.

order-shipped.ts
200 · 480ms
import { BirdClient } from "@bird/sdk";

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

const { data, error } = await bird.whatsapp.send({
  to:       "+15005550009",
  template: "order_shipped",
  locale:   "en_US",
  variables: {
    customer_name:   "Ada",
    order_id:        "BRD-49217",
    tracking_url:    "https://track.bird.dev/49217",
    eta:             "Thursday, May 21",
  },
}).safe();

if (error) throw error;
console.log(data.id);
// → "wa_msg_8nB91Yk3p..."

Chaque changement d'état est un webhook.

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

POST /webhooks/bird
signed
{
  "type": "whatsapp.read",
  "id":   "evt_7kQ02v...",
  "created_at": "2026-05-19T15:42:08.114Z",
  "data": {
    "wa_msg_id":   "wa_msg_8nB91Yk3p",
    "from":        "+15551234567",
    "to":          "+15005550009",
    "conversation_id": "wa_conv_3pX1g7t",
    "template":    "order_shipped",
    "delivered_at": "2026-05-19T15:42:01.802Z",
    "read_at":      "2026-05-19T15:42:08.020Z"
  }
}

Calendrier de renvoi : 5s, 30s, 5m, 30m, 2h, 6h, 12h. Mise en dead-letter après la dernière tentative ; chaque événement en dead-letter est rejouable depuis le tableau de bord ou l'API.

  • whatsapp.queuedAccepté 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.failedÉchec permanent — code de raison dans le payload.
  • whatsapp.receivedMessage entrant d'un utilisateur dans la fenêtre de session de 24 h.
  • whatsapp.template.approvedMeta a approuvé un modèle que vous avez soumis.
  • whatsapp.template.rejectedMeta a rejeté un modèle — motif du rejet dans le payload.

Le basculement vers SMS, c'est un attribut, pas une seconde intégration.

Si WhatsApp ne peut pas livrer — session expirée, destinataire sans opt-in, modèle pas encore approuvé — Bird achemine le même message par SMS dans la même requête. Même authentification, même contrat d'idempotence, même format de webhook de l'autre côté.

WhatsApp avec basculement.

whatsapp + fallback
await bird.whatsapp.send({
  to:       "+15005550009",
  template: "order_shipped",
  variables: { order_id: "BRD-49217" },
  fallback: "sms",
});

Un seul payload, une seule authentification. Expiration de session, absence d'opt-in, modèle non approuvé — tout bascule automatiquement vers SMS.

SMS direct.

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

Les mêmes canaux, adressés directement. Utilisez-le quand vous voulez explicitement le chemin SMS.

À partir de 0,005 $ par message + frais de conversation Meta au prix coûtant.

Facturation à l'usage. Nous répercutons les frais de conversation Meta au prix coûtant — sans marge. Les remises volume s'appliquent automatiquement au-delà de 100K/mois, puis au-delà de 1M/mois. Aucun frais par utilisateur, aucune fonctionnalité verrouillée derrière 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.

CommencerLire la docou

Using Claude Code, Cursor, or Codex? Point it at our MCP server — tools for every channel we expose, with scoped agent keys.

Cursor