“API: launch a broadcast”
POST /api/v1/broadcasts sends one approved template to up to 1,000 numbers per call, with per-recipient variables.
Scope: broadcasts:send
Launch — POST /api/v1/broadcasts
curl -X POST https://app.vatli.co/api/v1/broadcasts \
-H "Authorization: Bearer vatli_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" }
]
}'
- Up to 1,000 recipients per request — split bigger lists across calls.
paramsare that recipient’s body variables, in order.- Invalid numbers are dropped and counted as
rejected. - The broadcast and its recipients are saved immediately and sending happens in the background, so the call returns fast.
Response — 202 Accepted:
{
"data": {
"broadcast_id": "…",
"status": "sending",
"total_recipients": 2,
"accepted": 2,
"rejected": 0
}
}
Check progress — GET /api/v1/broadcasts/{id}
status moves from sending to sent. delivered_count and read_count keep climbing as Meta’s delivery reports arrive. Or subscribe to broadcast.completed with webhooks.
The same safety rules as the dashboard apply: opted-out contacts are skipped, duplicates collapse to one message, your plan’s monthly broadcast limit and Meta’s daily messaging limit are respected. See How broadcasts are delivered.