Broadcasts
Send an approved template to an audience, with throttling and per-recipient delivery reporting.
GET
/broadcastsComing soonPOST/broadcastsComing soonGET/broadcasts/{broadcast_id}Coming soonPOST/broadcasts/{broadcast_id}/cancelComing soonList broadcasts
Section titled “List broadcasts”GET
/v1/broadcastsComing soonQuery parameters
| Field | Type | Description |
|---|---|---|
cursor |
string | The next_cursor from the previous page. |
curl "https://api.waasl.io/v1/broadcasts" \ -H "Authorization: Bearer $WAASL_API_KEY"const res = await fetch("https://api.waasl.io/v1/broadcasts", { headers: { Authorization: `Bearer ${process.env.WAASL_API_KEY}` },});if (!res.ok) throw new Error((await res.json()).code);const data = await res.json();import osimport requests
r = requests.get( "https://api.waasl.io/v1/broadcasts", headers={"Authorization": f"Bearer {os.environ['WAASL_API_KEY']}"},)r.raise_for_status()print(r.json())Response 200 — A page of broadcasts
{ "data": [ { "name": "string", "channel_id": "string", "template": { "name": "string", "language": "string" }, "audience": { "tags": [], "stage_id": "string", "recipients": [] }, "send_at": "2026-10-01T08:15:00Z", "id": "bc_R2d9", "status": "scheduled", "counts": { "total": 0, "sent": 0, "delivered": 0, "read": 0, "replied": 0, "failed": 0 } } ], "next_cursor": "MjAyNi0xMC0wMVQwODoxNTowMC4wMDBafGN2XzNQekE5MQ", "has_more": true}Create a broadcast
Section titled “Create a broadcast”POST
/v1/broadcastsComing soonSends an approved template to an audience — a tag, a stage, or an explicit list of
up to 10,000 recipients with per-recipient template parameters. Schedule it with
send_at, or omit it to start now. Messages are paced to stay inside your WhatsApp
messaging tier.
Headers
| Field | Type | Description |
|---|---|---|
Idempotency-Key |
string | A unique key (UUID recommended). Retrying with the same key returns the original result instead of acting twice. Kept for 24 hours. |
Request body
| Field | Type | Description |
|---|---|---|
name required |
string | |
channel_id |
string | |
template required |
object | |
template.name |
string | |
template.language |
string | |
audience required |
object | One of tags, stage_id or recipients. |
audience.tags |
string[] | |
audience.stage_id |
string | |
audience.recipients |
object[] | |
send_at |
string (date-time) |
curl -X POST "https://api.waasl.io/v1/broadcasts" \ -H "Authorization: Bearer $WAASL_API_KEY" \ -H "Idempotency-Key: $(uuidgen)" \ -H "Content-Type: application/json" \ -d '{ "name": "Ramadan menu launch", "channel_id": "ch_wa_7Yt2", "template": { "name": "ramadan_menu", "language": "ar" }, "audience": { "tags": [ "active-subscriber" ] }, "send_at": "2026-10-05T09:00:00+03:00"}'const res = await fetch("https://api.waasl.io/v1/broadcasts", { method: "POST", headers: { Authorization: `Bearer ${process.env.WAASL_API_KEY}`, "Content-Type": "application/json", "Idempotency-Key": crypto.randomUUID() }, body: JSON.stringify({ "name": "Ramadan menu launch", "channel_id": "ch_wa_7Yt2", "template": { "name": "ramadan_menu", "language": "ar" }, "audience": { "tags": [ "active-subscriber" ] }, "send_at": "2026-10-05T09:00:00+03:00" }),});if (!res.ok) throw new Error((await res.json()).code);const data = await res.json();import os, uuidimport requests
r = requests.post( "https://api.waasl.io/v1/broadcasts", headers={"Authorization": f"Bearer {os.environ['WAASL_API_KEY']}", "Idempotency-Key": str(uuid.uuid4())}, json={ "name": "Ramadan menu launch", "channel_id": "ch_wa_7Yt2", "template": { "name": "ramadan_menu", "language": "ar" }, "audience": { "tags": ["active-subscriber"] }, "send_at": "2026-10-05T09:00:00+03:00" },)r.raise_for_status()print(r.json())Response 201 — Scheduled broadcast
{ "name": "string", "channel_id": "string", "template": { "name": "string", "language": "string" }, "audience": { "tags": [ "string" ], "stage_id": "string", "recipients": [ { "to": "string", "params": [] } ] }, "send_at": "2026-10-01T08:15:00Z", "id": "bc_R2d9", "status": "scheduled", "counts": { "total": 0, "sent": 0, "delivered": 0, "read": 0, "replied": 0, "failed": 0 }}Retrieve a broadcast
Section titled “Retrieve a broadcast”GET
/v1/broadcasts/{broadcast_id}Coming soonIncludes live counts — queued, sent, delivered, read, replied, failed.
Path parameters
| Field | Type | Description |
|---|---|---|
broadcast_id required |
string |
curl "https://api.waasl.io/v1/broadcasts/bc_R2d9" \ -H "Authorization: Bearer $WAASL_API_KEY"const res = await fetch("https://api.waasl.io/v1/broadcasts/bc_R2d9", { headers: { Authorization: `Bearer ${process.env.WAASL_API_KEY}` },});if (!res.ok) throw new Error((await res.json()).code);const data = await res.json();import osimport requests
r = requests.get( "https://api.waasl.io/v1/broadcasts/bc_R2d9", headers={"Authorization": f"Bearer {os.environ['WAASL_API_KEY']}"},)r.raise_for_status()print(r.json())Response 200 — The broadcast
{ "name": "string", "channel_id": "string", "template": { "name": "string", "language": "string" }, "audience": { "tags": [ "string" ], "stage_id": "string", "recipients": [ { "to": "string", "params": [] } ] }, "send_at": "2026-10-01T08:15:00Z", "id": "bc_R2d9", "status": "scheduled", "counts": { "total": 0, "sent": 0, "delivered": 0, "read": 0, "replied": 0, "failed": 0 }}Cancel a broadcast
Section titled “Cancel a broadcast”POST
/v1/broadcasts/{broadcast_id}/cancelComing soonStops a scheduled or sending broadcast. Messages already sent are not recalled.
Path parameters
| Field | Type | Description |
|---|---|---|
broadcast_id required |
string |
curl -X POST "https://api.waasl.io/v1/broadcasts/bc_R2d9/cancel" \ -H "Authorization: Bearer $WAASL_API_KEY"const res = await fetch("https://api.waasl.io/v1/broadcasts/bc_R2d9/cancel", { method: "POST", headers: { Authorization: `Bearer ${process.env.WAASL_API_KEY}` },});if (!res.ok) throw new Error((await res.json()).code);const data = await res.json();import osimport requests
r = requests.post( "https://api.waasl.io/v1/broadcasts/bc_R2d9/cancel", headers={"Authorization": f"Bearer {os.environ['WAASL_API_KEY']}"},)r.raise_for_status()print(r.json())Response 200 — Cancelled broadcast
{ "name": "string", "channel_id": "string", "template": { "name": "string", "language": "string" }, "audience": { "tags": [ "string" ], "stage_id": "string", "recipients": [ { "to": "string", "params": [] } ] }, "send_at": "2026-10-01T08:15:00Z", "id": "bc_R2d9", "status": "scheduled", "counts": { "total": 0, "sent": 0, "delivered": 0, "read": 0, "replied": 0, "failed": 0 }}