> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://developers.brevo.com/llms.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://developers.brevo.com/_mcp/server.

# WhatsApp campaigns

## Overview

The WhatsApp Campaigns API enables you to programmatically create and manage WhatsApp marketing campaigns. Use the API to:

* Create and manage WhatsApp campaigns and templates
* Broadcast messages to contact lists and segments
* Retrieve campaign statistics and performance metrics
* Schedule and update campaign delivery

You need access to the WhatsApp Campaigns feature in your Brevo account. See the [activation section](#activating-whatsapp) below.

## Activating WhatsApp

Before using the WhatsApp Campaigns API, activate WhatsApp in your Brevo account.

### Access Campaigns

Log in to your Brevo account and navigate to **Campaigns** from the left sidebar.

### Create Campaign

Click **Create Campaign** in the top-right corner of the Campaigns page.

### Select WhatsApp

Under **Standard** campaigns, select **WhatsApp** to activate the feature on your account.

After activation, you must link your WhatsApp Business account to Brevo. For detailed setup instructions, see the [WhatsApp onboarding guide](https://help.brevo.com/hc/en-us/articles/4417084910866-Part-1-Link-your-WhatsApp-Business-account-to-Sendinblue#Before_you_start).

## Get a WhatsApp campaign

Retrieve details for a specific WhatsApp campaign.

### Endpoint

**GET** `https://api.brevo.com/v3/whatsappCampaigns/{campaignId}`

### Path parameters

| Parameter    | Type  | Description |
| :----------- | :---- | :---------- |
| `campaignId` | int64 | Campaign ID |

### Request example

```curl
curl --request GET \
     --url https://api.brevo.com/v3/whatsappCampaigns/465908589032810 \
     --header 'accept: application/json' \
     --header 'api-key: YOUR_API_KEY'
```

### Response codes

| Code  | Description                             |
| :---- | :-------------------------------------- |
| `200` | Campaign details returned successfully  |
| `400` | Invalid request parameters              |
| `404` | Campaign ID not found or not accessible |

## Delete a WhatsApp campaign

Delete a WhatsApp campaign. You cannot delete campaigns that are currently being sent.

### Endpoint

**DELETE** `https://api.brevo.com/v3/whatsappCampaigns/{campaignId}`

### Path parameters

| Parameter    | Type  | Description |
| :----------- | :---- | :---------- |
| `campaignId` | int64 | Campaign ID |

Retrieve the `campaignId` from the Brevo WhatsApp dashboard or use the [get all campaigns](#return-all-your-created-whatsapp-campaigns) endpoint.

### Request example

```curl
curl --request DELETE \
     --url https://api.brevo.com/v3/whatsappCampaigns/465908589032810 \
     --header 'accept: application/json' \
     --header 'api-key: YOUR_API_KEY'
```

### Response codes

| Code  | Description                             |
| :---- | :-------------------------------------- |
| `204` | Campaign deleted successfully           |
| `400` | Invalid request parameters              |
| `404` | Campaign ID not found or not accessible |

## Update a WhatsApp campaign

Update campaign details, including status, recipients, and scheduling.

### Endpoint

**PUT** `https://api.brevo.com/v3/whatsappCampaigns/{campaignId}`

For detailed parameter information, see the [API reference](/reference/update-whats-app-campaign).

### Path parameters

| Parameter    | Type  | Description |
| :----------- | :---- | :---------- |
| `campaignId` | int64 | Campaign ID |

### Body parameters

| Parameter        | Type   | Description                                                                                                                                      |
| :--------------- | :----- | :----------------------------------------------------------------------------------------------------------------------------------------------- |
| `campaignName`   | String | Campaign name                                                                                                                                    |
| `campaignStatus` | String | Campaign status                                                                                                                                  |
| `rescheduleFor`  | String | UTC date-time (YYYY-MM-DDTHH:mm:ss.SSSZ) to reschedule the campaign. Include timezone for accurate results. Example: `2017-06-01T12:30:00+02:00` |
| `recipients`     | Object | Lists and segments to include or exclude                                                                                                         |

### Recipients object

| Parameter         | Type     | Description                                                             |
| :---------------- | :------- | :---------------------------------------------------------------------- |
| `excludedListIds` | int64\[] | List IDs to exclude from the campaign                                   |
| `listIds`         | int64\[] | Required if `scheduledAt` is provided. List IDs to send the campaign to |
| `segments`        | int64\[] | Required if `listIds` is not used. Segment IDs to send the campaign to  |

### Request example

```curl
curl --request PUT \
     --url https://api.brevo.com/v3/whatsappCampaigns/5678 \
     --header 'accept: application/json' \
     --header 'content-type: application/json' \
     --header 'api-key: YOUR_API_KEY' \
     --data '{
  "campaignStatus": "scheduled",
  "recipients": {
    "excludedListIds": [8],
    "listIds": [32],
    "segments": [23]
  },
  "campaignName": "Test WhatsApp",
  "rescheduleFor": "2017-06-01T12:30:00+02:00"
}'
```

### Response codes

| Code  | Description                   |
| :---- | :---------------------------- |
| `204` | Campaign updated successfully |
| `400` | Invalid or missing parameters |

## Get all WhatsApp templates

Retrieve all created WhatsApp templates with optional filtering.

### Endpoint

**GET** `https://api.brevo.com/v3/whatsappCampaigns/template-list`

### Query parameters

| Parameter   | Type   | Description                                                                                                                         |
| :---------- | :----- | :---------------------------------------------------------------------------------------------------------------------------------- |
| `startDate` | String | Required if `endDate` is used. Starting UTC date-time (YYYY-MM-DDTHH:mm:ss.SSSZ) to filter templates. Include timezone for accuracy |
| `endDate`   | String | Required if `startDate` is used. Ending UTC date-time (YYYY-MM-DDTHH:mm:ss.SSSZ) to filter templates. Include timezone for accuracy |
| `limit`     | int64  | Number of documents per page                                                                                                        |
| `offset`    | int64  | Index of the first document in the page                                                                                             |
| `sort`      | String | Sort order: `asc` or `desc`. Default is `desc`                                                                                      |

### Request example

```curl
curl --request GET \
     --url 'https://api.brevo.com/v3/whatsappCampaigns/template-list?startDate=2022-05-01T12%3A30%3A00Z&endDate=2022-07-01T12%3A30%3A00Z&limit=50&offset=0&sort=asc' \
     --header 'accept: application/json' \
     --header 'api-key: YOUR_API_KEY'
```

### Response example

```json
{
  "count": 1,
  "templates": [
    {
      "id": 235,
      "name": "campaign_22",
      "type": "whatsapp",
      "status": "approved",
      "language": "en",
      "category": "MARKETING",
      "errorReason": "NONE",
      "createdAt": "2017-05-01T12:30:00Z",
      "modifiedAt": "2017-05-01T12:30:00Z"
    }
  ]
}
```

### Response codes

| Code  | Description                      |
| :---- | :------------------------------- |
| `200` | Templates retrieved successfully |
| `400` | Invalid or missing parameters    |

## Create and send a WhatsApp campaign

Create a new WhatsApp campaign and schedule it for delivery.

### Endpoint

**POST** `https://api.brevo.com/v3/whatsappCampaigns`

### Body parameters

| Parameter     | Type    | Description                                                                                                                        |
| :------------ | :------ | :--------------------------------------------------------------------------------------------------------------------------------- |
| `name`        | String  | Campaign name                                                                                                                      |
| `templateId`  | Integer | ID of an approved WhatsApp template                                                                                                |
| `scheduledAt` | String  | UTC date-time (YYYY-MM-DDTHH:mm:ss.SSSZ) to schedule delivery. Include timezone for accuracy. Example: `2017-06-01T12:30:00+02:00` |
| `recipients`  | Object  | Lists and segments to include or exclude                                                                                           |

### Recipients object

| Parameter         | Type     | Description                                                             |
| :---------------- | :------- | :---------------------------------------------------------------------- |
| `excludedListIds` | int64\[] | List IDs to exclude from the campaign                                   |
| `listIds`         | int64\[] | Required if `scheduledAt` is provided. List IDs to send the campaign to |
| `segments`        | int64\[] | Required if `listIds` is not used. Segment IDs to send the campaign to  |

Get list and segment IDs using the [get all lists](/reference/get-lists) and [get all segments](/reference/get-segments) endpoints.

### Request example

```curl
curl --request POST \
     --url https://api.brevo.com/v3/whatsappCampaigns \
     --header 'accept: application/json' \
     --header 'api-key: YOUR_API_KEY' \
     --header 'content-type: application/json' \
     --data '{
  "recipients": {
    "excludedListIds": [8],
    "listIds": [32],
    "segments": [23]
  },
  "name": "Test Campaign",
  "templateId": 19,
  "scheduledAt": "2017-06-01T12:30:00+02:00"
}'
```

### Response example

```json
{
  "id": 5
}
```

### Response codes

| Code  | Description                                                      |
| :---- | :--------------------------------------------------------------- |
| `201` | Campaign created successfully                                    |
| `400` | Invalid parameters, duplicate campaign, or template not approved |

## Get all WhatsApp campaigns

Retrieve all WhatsApp campaigns with optional filtering.

### Endpoint

**GET** `https://api.brevo.com/v3/whatsappCampaigns`

### Query parameters

| Parameter   | Type   | Description                                                                                                                         |
| :---------- | :----- | :---------------------------------------------------------------------------------------------------------------------------------- |
| `startDate` | String | Required if `endDate` is used. Starting UTC date-time (YYYY-MM-DDTHH:mm:ss.SSSZ) to filter campaigns. Include timezone for accuracy |
| `endDate`   | String | Required if `startDate` is used. Ending UTC date-time (YYYY-MM-DDTHH:mm:ss.SSSZ) to filter campaigns. Include timezone for accuracy |
| `limit`     | int64  | Number of documents per page                                                                                                        |
| `offset`    | int64  | Index of the first document in the page                                                                                             |
| `sort`      | String | Sort order: `asc` or `desc`. Default is `desc`                                                                                      |

### Request example

```curl
curl --request GET \
     --url 'https://api.brevo.com/v3/whatsappCampaigns?startDate=2017-05-01T12%3A30%3A00Z&endDate=2017-07-01T12%3A30%3A00Z&limit=50&offset=0&sort=desc' \
     --header 'accept: application/json' \
     --header 'api-key: YOUR_API_KEY'
```

### Response example

```json
{
  "count": 23,
  "campaigns": [
    {
      "id": 1672035851100690,
      "campaignName": "campaign_22",
      "campaignStatus": "sent",
      "templateId": 637660278078655,
      "scheduledAt": "2022-12-27T09:50:00Z",
      "errorReason": "",
      "invalidatedContacts": 0,
      "stats": {
        "sent": 3,
        "delivered": 3,
        "read": 2,
        "unsubscribe": 0,
        "notSent": 4
      },
      "readPercentage": 28.57,
      "createdAt": "2017-05-01T12:30:00Z",
      "modifiedAt": "2017-05-01T12:30:00Z"
    }
  ]
}
```

### Response codes

| Code  | Description                      |
| :---- | :------------------------------- |
| `200` | Campaigns retrieved successfully |
| `400` | Invalid or missing parameters    |

## Create a WhatsApp template

Create a new WhatsApp template. Templates must be approved before use in campaigns.

### Endpoint

**POST** `https://api.brevo.com/v3/whatsappCampaigns/template`

### Body parameters

| Parameter    | Type   | Description                                                                                                         |
| :----------- | :----- | :------------------------------------------------------------------------------------------------------------------ |
| `name`       | String | Template name                                                                                                       |
| `language`   | String | Template language code (e.g., `en`)                                                                                 |
| `category`   | String | Template category: `MARKETING` or `UTILITY`                                                                         |
| `mediaUrl`   | String | Absolute URL of the media file for the header. Use when `headerText` is empty. Allowed formats: jpeg, png, mp4, pdf |
| `bodyText`   | String | Template body text. Maximum 1024 characters                                                                         |
| `headerText` | String | Template header text. Maximum 45 characters. Use when `mediaUrl` is empty                                           |

### Request example

```curl
curl --request POST \
     --url https://api.brevo.com/v3/whatsappCampaigns/template \
     --header 'accept: application/json' \
     --header 'content-type: application/json' \
     --header 'api-key: YOUR_API_KEY' \
     --data '{
  "category": "MARKETING",
  "name": "Test template",
  "language": "en",
  "mediaUrl": "https://attachment.domain.com",
  "bodyText": "making it look like readable English",
  "headerText": "Test WhatsApp campaign"
}'
```

### Response example

```json
{
  "id": 5
}
```

### Response codes

| Code  | Description                                                            |
| :---- | :--------------------------------------------------------------------- |
| `201` | Template created successfully                                          |
| `400` | Invalid parameters, duplicate template, or account validation required |

For detailed error information, see the [API reference](/reference/create-whats-app-template).

## Send WhatsApp template for approval

Submit a template for WhatsApp approval. Approved templates can be used in campaigns.

### Endpoint

**POST** `https://api.brevo.com/v3/whatsappCampaigns/template/approval/{templateId}`

### Path parameters

| Parameter    | Type  | Description |
| :----------- | :---- | :---------- |
| `templateId` | int64 | Template ID |

Get the `templateId` from the response when creating a WhatsApp template.

### Request example

```curl
curl --request POST \
     --url https://api.brevo.com/v3/whatsappCampaigns/template/approval/5 \
     --header 'accept: application/json' \
     --header 'api-key: YOUR_API_KEY'
```

### Response codes

| Code  | Description                                  |
| :---- | :------------------------------------------- |
| `200` | Template submitted for approval successfully |
| `400` | Invalid parameters or unauthorized           |

## Get WhatsApp API account information

Retrieve your WhatsApp Business account information, including sending limits and account status.

### Endpoint

**GET** `https://api.brevo.com/v3/whatsappCampaigns/config`

### Request example

```curl
curl --request GET \
     --url https://api.brevo.com/v3/whatsappCampaigns/config \
     --header 'accept: application/json' \
     --header 'api-key: YOUR_API_KEY'
```

### Response example

```json
{
  "whatsappBusinessAccountID": 105569359072383,
  "sendingLimit": "TIER_1K",
  "phoneNumberQuality": "GREEN",
  "whatsappBusinessAccountStatus": "APPROVED",
  "businessStatus": "verified",
  "phoneNumberNameStatus": "APPROVED"
}
```

### Response codes

| Code  | Description                                                              |
| :---- | :----------------------------------------------------------------------- |
| `200` | Account information retrieved successfully                               |
| `400` | Invalid parameters, insufficient credits, or account validation required |