Send Bulk Message
Send the same message to multiple recipients (max 50). The message body follows the same structure as single message operations — specify the message_type and its required fields.
Recipients are deduplicated automatically. Empty phone numbers are ignored.
Authorization
ApiKeyAuth API key from your dashboard (Settings > API Keys)
In: header
Header Parameters
Optional. Attribute this send to a specific agent, overriding the agent bound to the API key. The agent must belong to your account and be active (role AGENT, parent = your account) — otherwise the request returns 400. Drives customer assignment, agent allotment limits, and the wallet ledger entry.
Request Body
application/json
TypeScript Definitions
Use the request body type in TypeScript.
Response Body
application/json
application/json
application/json
application/json
application/json
curl -X POST "https://loading/api/v1/messages/send/bulk" \ -H "X-AGENT-ID: agt_abc123" \ -H "Content-Type: application/json" \ -d '{ "to": [ "919876543210", "919876543211", "919876543212" ], "message": { "message_type": "template", "template_name": "promotion_offer", "template_language": "en_US", "body_variables": [ "30%", "March 31, 2026" ] } }'{
"success": true,
"data": {
"results": [
{
"to": "string",
"id": "string",
"error": "string"
}
]
}
}{
"success": false,
"message": "to field is required"
}{
"success": false,
"message": "user not authenticated"
}{
"success": false,
"message": "insufficient balance to send message"
}{
"success": false,
"message": "internal server error"
}Send Template with Named Variables POST
Send a template created in the dashboard with named variables, for example `Hello {{name}}, my name is {{vendor_name}}. Regards, {{vendor_name}}`. Pass one `named_variables` object keyed by variable name, instead of ordered `body_variables` / `header_variables`. Each name fills every header, body and URL-button slot where it appears. - System variables (`customer.name`, `customer.phone`, `customer.email`, `customer.attributes.<attribute>`, `business.name`, `date.today`) resolve from the recipient and may be omitted. - A custom variable that is omitted uses its saved fallback value. - Values are resolved in this order: the value you pass, then the system value, then the fallback. Blank values count as missing. Returns `400` when `named_variables` is sent together with `body_variables` / `header_variables`, when the template was not created with named variables, or when a variable is still missing (the error lists the names). List your variables with `GET /api/v1/named-variables` and the built-in ones with `GET /api/v1/named-variables/system`.
Upload Media POST
Upload a media file to the WhatsApp media library. The uploaded media can then be used in messages by referencing its `id`. **Supported file types and size limits:** | Type | Formats | Max Size | |------|---------|----------| | Image | PNG, JPG, JPEG | 5 MB | | Video | MP4 | 16 MB | | Audio | OGG, MP3, M4A, WEBM | 16 MB | | Document | PDF | 100 MB |


