// 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.

POST/api/v1/broadcasts

Send or schedule a campaign

Scope: broadcasts:send

FieldNotes
template_nameRequired. An approved template
template_languageDefault en_US
recipientsRequired, 1 to 1,000 items of { "to", "params"? }
nameA label for your team
scheduled_atISO-8601, in the future, at most 90 days ahead. Omit to send now
tracked_link_urlCount 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

If a scheduled campaign cannot start within an hour of its time, it is marked 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.

GET/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": "…"
  }
}