---
title: "Send WhatsApp Message"
description: "Send a text message to a single WhatsApp recipient using API v2."
---

# Send WhatsApp Message

Use this endpoint to dispatch a direct WhatsApp text message to any phone number from your connected WhatsApp account.

## Endpoint

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

## Authorization

Header authorization is recommended for all requests:

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

## Request Parameters

| Parameter | Required | Type | Description |
| --- | --- | --- | --- |
| `recipient` | Yes | string | Destination phone number in international format without `+` (e.g. `254700000001`). Aliases: `mobile`, `phone`. |
| `message` | Yes | string | Plain text message body. Standard WhatsApp markdown is supported (`*bold*`, `_italics_`, `~strikethrough~`, `\`\`\`code\`\`\``). Aliases: `text`. |

## Request Examples

<CodeGroup>

```bash curl
curl -X POST "https://api.bulkitsms.com/api/v2/messages/whatsapp" \
  -H "Authorization: Bearer bk_live_8n6JQv3K1h9Lp0Md" \
  -H "Content-Type: application/json" \
  -d '{
    "recipient": "254700000001",
    "message": "Hello! Your payment of KES 1,500 has been received successfully. Receipt: *#REC-8421*"
  }'
```

```python Python
import requests

url = "https://api.bulkitsms.com/api/v2/messages/whatsapp"
headers = {
    "Authorization": "Bearer bk_live_8n6JQv3K1h9Lp0Md",
    "Content-Type": "application/json",
}
payload = {
    "recipient": "254700000001",
    "message": "Hello! Your payment of KES 1,500 has been received successfully. Receipt: *#REC-8421*",
}

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

```javascript Node.js
const response = await fetch("https://api.bulkitsms.com/api/v2/messages/whatsapp", {
  method: "POST",
  headers: {
    "Authorization": "Bearer bk_live_8n6JQv3K1h9Lp0Md",
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    recipient: "254700000001",
    message: "Hello! Your payment of KES 1,500 has been received successfully. Receipt: *#REC-8421*",
  }),
});

const data = await response.json();
console.log(data);
```

```go Go
package main

import (
	"bytes"
	"encoding/json"
	"fmt"
	"net/http"
)

func main() {
	payload := map[string]string{
		"recipient": "254700000001",
		"message":   "Hello! Your payment of KES 1,500 has been received successfully.",
	}
	body, _ := json.Marshal(payload)

	req, _ := http.NewRequest("POST", "https://api.bulkitsms.com/api/v2/messages/whatsapp", bytes.NewReader(body))
	req.Header.Set("Authorization", "Bearer bk_live_8n6JQv3K1h9Lp0Md")
	req.Header.Set("Content-Type", "application/json")

	resp, err := http.DefaultClient.Do(req)
	if err != nil {
		panic(err)
	}
	defer resp.Body.Close()
	fmt.Println("Status:", resp.Status)
}
```

```php PHP
<?php

$payload = [
    "recipient" => "254700000001",
    "message" => "Hello! Your payment of KES 1,500 has been received successfully.",
];

$ch = curl_init("https://api.bulkitsms.com/api/v2/messages/whatsapp");
curl_setopt_array($ch, [
    CURLOPT_POST => true,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER => [
        "Authorization: Bearer bk_live_8n6JQv3K1h9Lp0Md",
        "Content-Type: application/json",
    ],
    CURLOPT_POSTFIELDS => json_encode($payload),
]);

$response = curl_exec($ch);
curl_close($ch);
echo $response;
```

</CodeGroup>

## Success Response Example

```json
{
  "status": "success",
  "message": "WhatsApp message sent successfully",
  "data": {
    "id": "7b8f844a-f5e2-4144-84c4-f655e88b2a1a",
    "message_id": "3EB0C34B8F56D254",
    "recipient": "254700000001",
    "chat_jid": "254700000001@s.whatsapp.net",
    "text": "Hello! Your payment of KES 1,500 has been received successfully. Receipt: *#REC-8421*",
    "media_type": "text",
    "media_url": "",
    "file_name": "",
    "file_size": 0,
    "mime_type": "",
    "cost": 0.03,
    "currency": "KES",
    "status": "sent",
    "timestamp": "2026-09-19T06:30:00Z"
  }
}
```

## Error Responses

### WhatsApp Device Disconnected

If your WhatsApp account is not paired or disconnected in the dashboard:

```json
{
  "status": "error",
  "message": "WhatsApp client is not connected. Please scan QR code in settings to reconnect."
}
```

### Insufficient Balance

```json
{
  "status": "error",
  "message": "Insufficient balance"
}
```

### Missing Recipient or Message

```json
{
  "status": "error",
  "message": "recipient or mobile number is required"
}
```
