---
title: "Send Bulk WhatsApp Broadcast"
description: "Send personalized WhatsApp broadcast campaigns to multiple mobile numbers simultaneously."
---

# Send Bulk WhatsApp Broadcast

Use this endpoint to dispatch broadcast messages to multiple recipients. Bulkit supports templating with custom parameters so each contact receives a personalized message.

## Endpoint

```http
POST /api/v2/messages/whatsapp/bulk
```

## Authorization

```http
Authorization: Bearer bk_live_8n6JQv3K1h9Lp0Md
Content-Type: application/json
```

## Request Parameters

| Parameter | Required | Type | Description |
| --- | --- | --- | --- |
| `mobiles` | Yes | array of strings | List of recipient phone numbers in international format (e.g. `["254700000001", "254711111111"]`). |
| `message` | Yes | string | Broadcast message content. You can include placeholders in `{tag}` syntax (e.g. `{first_name}`, `{account}`, `{amount}`). |
| `custom_data` | No | array of objects | Optional per-recipient data matching the order of the `mobiles` array. Each key replaces `{key}` in the message. |

## Request Examples

### 1. Simple Broadcast (Identical Message)

```bash
curl -X POST "https://api.bulkitsms.com/api/v2/messages/whatsapp/bulk" \
  -H "Authorization: Bearer bk_live_8n6JQv3K1h9Lp0Md" \
  -H "Content-Type: application/json" \
  -d '{
    "mobiles": ["254700000001", "254711111111", "254722222222"],
    "message": "Dear customer, our offices will be closed on Monday for the public holiday."
  }'
```

### 2. Personalized Broadcast with Custom Data

<CodeGroup>

```bash curl
curl -X POST "https://api.bulkitsms.com/api/v2/messages/whatsapp/bulk" \
  -H "Authorization: Bearer bk_live_8n6JQv3K1h9Lp0Md" \
  -H "Content-Type: application/json" \
  -d '{
    "mobiles": [
      "254700000001",
      "254711111111"
    ],
    "message": "Hello {first_name}, your policy #{policy_no} renewal of KES {amount} is due on {due_date}.",
    "custom_data": [
      {
        "first_name": "Alice",
        "policy_no": "POL-9921",
        "amount": "3,500",
        "due_date": "25th Sep"
      },
      {
        "first_name": "Bob",
        "policy_no": "POL-4410",
        "amount": "5,200",
        "due_date": "28th Sep"
      }
    ]
  }'
```

```python Python
import requests

url = "https://api.bulkitsms.com/api/v2/messages/whatsapp/bulk"
headers = {
    "Authorization": "Bearer bk_live_8n6JQv3K1h9Lp0Md",
    "Content-Type": "application/json",
}

payload = {
    "mobiles": ["254700000001", "254711111111"],
    "message": "Hello {name}, your monthly statement for account #{account} is ready.",
    "custom_data": [
        {"name": "Alice", "account": "ACC-1001"},
        {"name": "Bob", "account": "ACC-1002"},
    ],
}

response = requests.post(url, json=payload, headers=headers)
print(response.json())
```

```javascript Node.js
const response = await fetch("https://api.bulkitsms.com/api/v2/messages/whatsapp/bulk", {
  method: "POST",
  headers: {
    "Authorization": "Bearer bk_live_8n6JQv3K1h9Lp0Md",
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    mobiles: ["254700000001", "254711111111"],
    message: "Hello {name}, your package #{tracking} is on the way.",
    custom_data: [
      { name: "Alice", tracking: "TRK-01" },
      { name: "Bob", tracking: "TRK-02" },
    ],
  }),
});

console.log(await response.json());
```

</CodeGroup>

## Success Response Example

```json
{
  "status": "success",
  "message": "Bulk WhatsApp messages queued for delivery",
  "data": {
    "total_recipients": 2,
    "cost_per_message": 0.03,
    "total_cost": 0.06,
    "currency": "KES"
  }
}
```

## How Delivery Works

1. Bulkit calculates the total required credits and checks your wallet balance.
2. The broadcast job queues asynchronously in the background.
3. Bulkit renders each personalized message dynamically and dispatches them through your paired WhatsApp session.
4. As messages are delivered and read by recipients, delivery receipts are forwarded to your configured **DLR Webhook URL**.
