Skip to main content

Documentation Index

Fetch the complete documentation index at: https://mintlify.com/ArnasDon/wacrm/llms.txt

Use this file to discover all available pages before exploring further.

The Broadcasts API lets you send a WhatsApp template message to a large list of recipients in a single API call. Broadcasts are asynchronous — Wacrm persists the broadcast and its recipient rows immediately and fans out the Meta API calls in the background, so your request returns fast. Use GET /api/v1/broadcasts/{id} to poll for send progress and delivery stats.

POST /api/v1/broadcasts

Required scope: broadcasts:send Creates a broadcast and begins sending in the background. The response is returned with HTTP 202 Accepted as soon as the broadcast record is persisted — the actual message sends happen after the response is delivered.

Request body

name
string
A human-readable label for the broadcast (e.g. "July promo"). Appears in the dashboard broadcast list. Optional — if omitted, Wacrm auto-generates a label from the template name.
template_name
string
required
The exact name of the approved WhatsApp template to send (e.g. "promo_july"). Must match the name as it appears in Meta Business Manager.
template_language
string
default:"en_US"
The BCP-47 language code of the template variant to use (e.g. "en_US"). Defaults to en_US when omitted.
recipients
object[]
required
An array of recipient objects. At least one recipient is required; maximum 1000 per request.

Example

curl -X POST https://your-crm.example.com/api/v1/broadcasts \
  -H "Authorization: Bearer wacrm_live_xxx" \
  -H "Content-Type: application/json" \
  -d '{
        "name": "July promo",
        "template_name": "promo_july",
        "template_language": "en_US",
        "recipients": [
          { "to": "+14155550123", "params": ["Jane"] },
          { "to": "+14155550124" }
        ]
      }'

Response (202)

{
  "data": {
    "broadcast_id": "bc1d2e3f-…",
    "status": "sending",
    "total_recipients": 2,
    "accepted": 2,
    "rejected": 0
  }
}
broadcast_id
string
UUID of the newly created broadcast. Pass this to GET /api/v1/broadcasts/{id} to poll for progress.
status
string
Always "sending" at creation time. Moves to "sent" once all fan-out attempts have completed.
total_recipients
number
The number of recipients that were accepted and queued for sending.
accepted
number
Number of phone numbers that passed validation and were queued.
rejected
number
Number of phone numbers that failed E.164 validation and were dropped before sending.
The recipients array is capped at 1000 entries per request. For larger campaigns, split your audience into batches of up to 1000 and make multiple POST /api/v1/broadcasts calls — one per batch. Each call returns its own broadcast_id that you can poll independently.

GET /api/v1/broadcasts/{id}

Required scope: broadcasts:send Returns the current state and delivery statistics for a broadcast. Poll this endpoint after a POST to track send progress.
curl https://your-crm.example.com/api/v1/broadcasts/bc1d2e3f-… \
  -H "Authorization: Bearer wacrm_live_xxx"

Response

{
  "data": {
    "id": "bc1d2e3f-…",
    "name": "July promo",
    "template_name": "promo_july",
    "template_language": "en_US",
    "status": "sent",
    "total_recipients": 2,
    "sent_count": 2,
    "delivered_count": 1,
    "read_count": 0,
    "replied_count": 0,
    "failed_count": 0,
    "created_at": "2026-07-01T10:00:00.000Z",
    "updated_at": "2026-07-01T10:00:45.000Z"
  }
}
status
string
"sending" while the background fan-out is in progress; "sent" once all sends have been attempted.
sent_count
number
Number of recipients for whom the send was accepted by Meta.
delivered_count
number
Number of recipients who have received the message on their device. Updates in real time as Meta delivery webhooks arrive.
read_count
number
Number of recipients who have opened the message. Updates in real time as Meta read-receipt webhooks arrive.
replied_count
number
Number of recipients who replied to the broadcast message.
failed_count
number
Number of sends that were rejected by Meta or could not be dispatched.
Returns 404 if the broadcast does not exist or belongs to a different account.
delivered_count and read_count keep incrementing after status reaches "sent" — Meta delivers receipt webhooks asynchronously and they can arrive minutes or hours after the initial send. Continue polling if accurate delivery metrics matter for your workflow.

Build docs developers (and LLMs) love