Bulk sending with the WhatsApp API (bulk_messages)
Last updated: 11 October 2026 · 7 min read
A bulk send sends one template to many numbers with a single request. The request is accepted and runs in the background (202 Accepted): a thousand recipients means a thousand separate Meta requests, and an HTTP connection cannot be held open that long.
Steps
-
1
Who can send
Administrators only. A bulk send goes out from the account's number to thousands of customers and affects your Meta account's quality rating, so it is not an agent-level decision.
-
2
Build the request
POST /v1/accounts/{account_id}/whatsapp/bulk_messages. Fields:channel_id(required)template.nameandtemplate.language(required, shared by all recipients)template.parameters: shared parametersconversation_status:resolved,open,pendingstatus_callback: each number's status arrives at your URL separately, and the delay counts from that number's send. The fields are the same as for a single sendrecipients(required, at most 1000). Each recipient hasphone_number(required),parameters(specific to this recipient, replacing the shared parameters) andcontact(name,email,identifier)
To address everyone by their own name, put the name in the recipient's
parametersfield:{ "channel_id": 159, "template": { "name": "kampaniya_avqust", "language": "az" }, "recipients": [ { "phone_number": "+994 50 123 45 67", "parameters": { "body": { "1": "Kenan" } }, "contact": { "name": "Kenan Rzayev" } }, { "phone_number": "+994 55 111 22 33", "parameters": { "body": { "1": "Aygun" } } } ] } -
3
Response: batch_id
The response comes back as
202 Accepted:{ "batch": { "batch_id": "7c1f2a3e-9b44-4c2e-8a11-5f0d9b6e2a77", "channel_id": 159, "template_name": "kampaniya_avqust", "total": 2, "status": "processing", "sent_count": 0, "failed_count": 0, "pending_count": 2, "recipients": [ { "index": 0, "status": "pending" }, { "index": 1, "status": "pending" } ] } } -
4
Read the result
GET /v1/accounts/{account_id}/whatsapp/bulk_messages/{batch_id}statusisprocessinguntil every recipient has been handled, then it becomescompleted. Each recipient has its own result:message_idandconversation_idwhen it issent, anderrorwhen it isfailed(for example"Invalid phone number: ...").The result is kept for 7 days, after which
404comes back. The messages themselves and the conversations stay in Clomni permanently. -
5
More than 1000 recipients
Split the list into parts of 1000 and send the requests one after another. Each part gets its own
batch_id.- a request with more than 1000 recipients returns
422:A batch can hold at most 1000 recipients - an empty list is also
422:recipients must be a non-empty array
- a request with more than 1000 recipients returns
-
6
Before you send
- Test a new template on 5-10 numbers first, read the result, then move to the full list: a thousand messages with a wrong parameter cost both money and rating.
- Get the customer's consent to receive messages (opt-in) and keep a record of it: a bulk send without consent can end with the number being blocked.
- When customers choose “Report” or “Block”, the quality rating drops, and that lowers the daily limit.
- Put a quick reply button in the campaign template: the next 24 hours with a customer who replies are free.
-
7
Speed
Messages go through a background queue. The real speed is set by the limit Meta gives your account; usually hundreds of messages go out per minute.