Bereik klanten wereldwijd met WhatsApp API

Verbind marketing-, service- en operationele teams met klanten op 's werelds populairste messaging-app.

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 minuten van npm install tot eerste verzending

Verstuur een WhatsApp-bericht in de taal die u al gebruikt.

SDK's in elke belangrijke runtime. De eerste verzending gaat via een door Bird beheerd template zoals bird_delivery_update, al goedgekeurd door Meta en met automatische afzenderselectie, zodat u een echt bericht ziet aankomen voordat u er zelf een schrijft.

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);

Twijfel je tussen de app en een integratie? Vergelijk de WhatsApp Business-app en het Platform API en volg dan de WhatsApp-verzendgids om het voorbeeld in je applicatie te gebruiken.

Acht dingen die wij regelen tussen u en Meta.

WhatsApp is afgeschermd: een goedgekeurd template, een opted-in ontvanger, een geverifieerd bedrijf. Die drempels veranderen niet. Uw provider bepaalt of ze in uw code zichtbaar zijn of verborgen zitten in een dashboard.

  1. 01

    Officiële Meta Business Solution Provider (BSP)

    Directe relatie met Meta sinds het bestaan van de API. Geen doorverkocht transport, geen tussenstation van derden.

  2. 02

    Templatebeheer

    Bekijk de catalogus en Meta's beoordeling per taal vanuit de CLI of MCP-tools. Het opstellen en indienen gebeurt in het dashboard.

  3. 03

    Templates in elke taal

    Eén slug, meerdere talen. Geef er één op bij het verzenden, of laat de standaardtaal van het template het bepalen.

  4. 04

    Knoppen en carrousels

    Link-, snelantwoord-, telefoonnummer- en kopieercode-knoppen, en carrousels met 2-10 kaarten.

  5. 05

    Media en rijke content

    Afbeeldingen, video, audio, stickers, documenten en locatie, elk in één verzendveld.

  6. 06

    Tags en metadata bij elke verzending

    Tags worden filter- en analysedimensies; metadata komt terug bij elke webhook.

  7. 07

    Webhooks voor inkomende berichten

    HMAC-ondertekende events voor inkomende berichten, bezorgbevestigingen en leesbevestigingen.

  8. 08

    3 miljard+ gebruikers via één endpoint

    Meer dan drie miljard maandelijkse WhatsApp-gebruikers bereikbaar via één enkele bird.whatsapp.send-aanroep.

Waarom wij WhatsApp bouwen

Wij waren een van de eerste WhatsApp BSP's. We zijn nog steeds een van de weinigen die mee-ontwikkelen met uw code.

WhatsApp is afgeschermd. U hebt een goedgekeurd template nodig; u hebt een open klantenservicevenster nodig om iets anders te versturen; u hebt een Meta-bedrijfsverificatie nodig. Dat verandert niet, en dat zal het ook niet. Wat wel verandert, is of uw BSP die drempels makkelijker of moeilijker maakt: door ze zichtbaar te maken in uw code, via webhooks waarop u zich kunt abonneren, in foutmeldingen die precies vertellen wat er mis is. Wij kozen het eerste.

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"

Elke statuswijziging is een webhook.

HMAC-ondertekende payloads, replay-beschermd, idempotent. Dezelfde envelope op elk Bird-kanaal: leer er één, en u kent ze allemaal.

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" }
  }
}

Herhalingsschema: 5s, 5m, 30m, 2u, 5u, daarna tweemaal 10u. Na de laatste poging mislukt de bezorging definitief, en replay herstelt deze vanuit het dashboard of de API.

  • whatsapp.acceptedGeaccepteerd door de API en in de wachtrij gezet voor verzending naar Meta.
  • whatsapp.sentOvergedragen aan Meta's Cloud API.
  • whatsapp.deliveredMeta meldt dat het bericht op het apparaat van de ontvanger is afgeleverd.
  • whatsapp.readOntvanger heeft het bericht geopend (als leesbevestigingen aan staan).
  • whatsapp.rejectedGeweigerd vóór verzending, en niet in rekening gebracht: redencode in de payload.
  • whatsapp.failedPermanente fout: redencode in de payload.
  • whatsapp.receivedInkomend bericht van een WhatsApp-gebruiker.

Dezelfde klant bereiken via SMS is dezelfde aanroep, één veld verder.

Dezelfde client, dezelfde authenticatie, dezelfde foutstructuur, dezelfde webhook-opbouw. Wat verandert is de payload: WhatsApp bevat een door Meta goedgekeurd template, SMS bevat tekst. Tags en metadata reizen bij beide mee, zodat één set dashboards beide kanalen dekt.

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" },
    ] }],
  },
});

Een door Bird beheerd template: goedgekeurd door Meta, beschikbaar in 70+ talen, en het kiest automatisch een afzender. Plaatshouderwaarden worden meegegeven als componenten.

SMS

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

Hetzelfde werkwoord op het andere kanaal: vrije tekst plus een categorie, zonder templategoedkeuring in de weg.

Één tarief per bericht, inclusief de Meta-kosten.

Prijzen op basis van gebruik. Elk tarief dekt de kosten van Meta en die van ons in één bedrag, en beweegt mee met het bestemmingsland en de berichtcategorie. Geen kosten per gebruiker en niets achter een jaarcontract.

Verstuur je eerste verzoek voordat je code schrijft.

De volledige openbare API is een Postman-collectie, gegenereerd uit dezelfde OpenAPI-specificatie als de SDK's, met een voorbeeldverzoek en -antwoord op elk endpoint. Fork de collectie naar je eigen werkruimte, stel een API-sleutel in en verstuur een live verzoek.

Begin met één kanaal.
Voeg de rest toe wanneer je er klaar voor bent.

Een test-API-key is direct beschikbaar. Productietoegang wordt ontgrendeld zodra je een betaalmethode toevoegt en een afzender verifieert.

Gebruik je Claude Code, Cursor of Codex? Kopieer een setup-prompt en je agent installeert de Bird CLI en skills voor je. Kies de jouwe:

Cursor