// Endpoints
Broadcasts
Send or schedule a template campaign and follow its progress.
A broadcast sends one approved template to many people. The call returns as soon as the campaign is saved, and sending continues in the background, so check its progress with the status endpoint.
/api/v1/broadcastsSend or schedule a campaign
Scope: broadcasts:send
| Field | Notes |
|---|---|
template_name | Required. An approved template |
template_language | Default en_US |
recipients | Required, 1 to 1,000 items of { "to", "params"? } |
name | A label for your team |
scheduled_at | ISO-8601, in the future, at most 90 days ahead. Omit to send now |
tracked_link_url | Count clicks on the template’s URL button — see below |
curl -X POST https://whatsapp.esendblue.com/api/v1/broadcasts \
-H "Authorization: Bearer wacrm_live_YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{
"name": "Diwali offer",
"template_name": "festive_offer",
"template_language": "en",
"recipients": [
{ "to": "+919876543210", "params": ["Priya"] },
{ "to": "+919812345678", "params": ["Rahul"] }
]
}'rejected: numbers that are not valid phone numbers.suppressed: contacts who opted out. They are never sent marketing, whatever the request says.capped: held back by your frequency cap or by the number's daily sending limit.
For more than 1,000 people, split the list across several calls.
Scheduling#
Add scheduled_at and the response is { broadcast_id, status: "scheduled", scheduled_at, submitted_recipients }. Nothing is checked or sent until the time comes. Opt-outs, caps and limits are applied when the campaign fires, so a contact who opts out in the meantime is left out. That is why the response says submitted_recipients, not how many will be delivered.
A missed slot is not sent late
failed rather than sent late. A sale message that arrives after the sale ended does more harm than good.Click tracking#
WhatsApp reports delivered and read, but never a click. With tracked_link_url, the template's URL button goes through us: we count the visit, then send the person on to your page. This only works for a template submitted with a URL button ending in {{1}}, because Meta fixes the rest of the URL when it approves the template. Any other template is sent without tracking rather than failing.
/api/v1/broadcasts/{id}Campaign status and counts
Scope: broadcasts:send
status moves from sending to sent once every recipient has been tried. The delivered, read and replied counts keep rising afterwards as WhatsApp reports back.
{
"data": {
"id": "…",
"name": "Diwali offer",
"template_name": "festive_offer",
"template_language": "en",
"status": "sent",
"total_recipients": 2,
"sent_count": 2,
"delivered_count": 2,
"read_count": 1,
"replied_count": 0,
"failed_count": 0,
"created_at": "…",
"updated_at": "…"
}
}