Engage customers worldwide with WhatsApp API

Connect marketing, service, and ops teams with customers on the world's most popular 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 minutes from npm install to first send

उसी भाषा से WhatsApp भेजें जो आप पहले से इस्तेमाल करते हैं।

SDKs in every major runtime. The first send goes out on a Bird-managed template like bird_delivery_update, already approved by Meta and picking its own sender, so you watch a real message land before you author one of your own.

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

Eight things we handle between you and Meta.

WhatsApp is gated: an approved template, an opted-in recipient, a verified business. Those gates do not move. Your provider decides whether they show up in your code or get buried in a dashboard.

  1. 01

    आधिकारिक Meta Business Solution Provider (BSP)

    जब से यह API मौजूद है, तब से Meta के साथ सीधा रिश्ता। न कोई रीसेल किया गया transit, न कोई तीसरे-पक्ष का hop।

  2. 02

    Template प्रबंधन

    Read the catalog and Meta's verdict per language from the CLI or MCP tools. Authoring and submission are in the dashboard.

  3. 03

    Templates in every language

    One slug, many languages. Name one on the send, or let the template's default resolve.

  4. 04

    Buttons and carousels

    Link, quick-reply, phone-number and copy-code buttons, and 2-10 card carousels.

  5. 05

    Media और rich content

    Images, video, audio, stickers, documents, and location, on one send field each.

  6. 06

    Tags and metadata on every send

    Tags become filter and analytics dimensions; metadata rides back on every webhook.

  7. 07

    Inbound message webhooks

    HMAC-signed events for inbound messages, delivery receipts, and read receipts.

  8. 08

    3B+ users on one endpoint

    Three billion-plus monthly WhatsApp users addressable from a single bird.whatsapp.send call.

हम WhatsApp क्यों बनाते हैं

हम पहले WhatsApp BSPs में से एक थे। हम आज भी उन गिने-चुने में से हैं जो आपके साथ कोड शिप करते हैं।

WhatsApp is gated. You need an approved template; you need an open customer service window to send anything but one; you need a Meta business verification. That part doesn't change, and won't. What changes is whether your BSP makes those gates easier or harder to walk through: by exposing them in your code, on webhooks you can subscribe to, in errors that say exactly what's wrong. We chose the first.

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"

हर state change एक webhook है।

HMAC-signed payloads, replay-protected, idempotent. The same envelope on every Bird channel: learn one, you've learned them all.

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

Retry schedule: 5s, 5m, 30m, 2h, 5h, then 10h twice. After the last one the delivery is permanently failed, and replay recovers it from the dashboard or API.

  • whatsapp.acceptedAPI द्वारा स्वीकृत और Meta को भेजने के लिए queue में।
  • whatsapp.sentMeta के Cloud API को सौंप दिया गया।
  • whatsapp.deliveredMeta बताता है कि message रिसीपिएंट के डिवाइस पर पहुँच गया।
  • whatsapp.readरिसीपिएंट ने message खोला (अगर read receipts चालू हों)।
  • whatsapp.rejectedRefused before send, and not charged: reason code in the payload.
  • whatsapp.failedPermanent failure: reason code in the payload.
  • whatsapp.receivedInbound message from a WhatsApp user.

Reaching the same customer on SMS is the same call, one field over.

Same client, same auth, same error envelope, same webhook shape. What changes is the payload: WhatsApp carries a template Meta approved, SMS carries text. Tags and metadata ride along on both, so one set of dashboards covers the pair.

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

A Bird-managed template: approved by Meta, stocked in 70+ languages, and it picks its own sender. Placeholder values ride in as components.

SMS

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

The same verb on the other channel: free-form text plus a category, no template approval in the way.

प्रति संदेश एक दर, जिसमें Meta की फ़ीस शामिल है।

उपयोग के आधार पर कीमत। हर दर में Meta की फ़ीस और हमारी फ़ीस एक ही संख्या में शामिल है, और यह गंतव्य देश तथा संदेश श्रेणी के अनुसार बदलती है। कोई प्रति-सीट शुल्क नहीं, और कुछ भी वार्षिक प्रतिबद्धता के पीछे बंद नहीं।

एक चैनल से शुरुआत करें।
तैयार होने पर बाकी जोड़ें।

एक test API key तुरंत आपकी है। जब आप payment method जोड़ते हैं और sender verify करते हैं, तब production अनलॉक हो जाता है।

Claude Code, Cursor या Codex इस्तेमाल कर रहे हैं? एक setup prompt कॉपी करें और आपका agent आपके लिए Bird CLI और skills इंस्टॉल कर देगा। अपना चुनें:

Cursor