Broadcast
Kirim Broadcast
Kirim pesan template ke banyak nomor telepon dalam satu panggilan API. Pesan dimasukkan ke antrean dan dikirim secara asinkron.
POST /api/v1/public/broadcast/send
Parameter
| Parameter | Tipe | Wajib | Keterangan |
|---|---|---|---|
template_name | string | ya | Nama template WhatsApp yang sudah disetujui |
language | string | ya | Kode bahasa template (mis. "id", "en_US") |
phone_numbers | string[] | ya | Array nomor telepon penerima dalam format E.164 |
whatsapp_phone_number_id | string | tidak | ID nomor telepon WhatsApp pengirim. Jika dikosongkan, memakai nomor utama. |
components | object | tidak | Nilai variabel body template sebagai objek datar: nomor variabel → nilai, mis. { "1": "John", "2": "INV-1" }. Satu key untuk setiap placeholder {{n}} di body template. |
Penting: Template harus sudah disetujui Meta sebelum digunakan. Semua penerima mendapat template yang sama dengan nilai variabel yang sama. Catatan: components di sini berupa objek datar (mis. { "1": "50%" }) — berbeda dengan format array yang dipakai di Kirim Pesan.
Contoh Request
- cURL
- JavaScript
- Python
curl -X POST "https://chat.api.co.id/api/v1/public/broadcast/send" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"template_name": "promo_sale",
"language": "id",
"phone_numbers": ["+628123456789", "+628987654321"],
"whatsapp_phone_number_id": "clyyy9876543210",
"components": { "1": "50%" }
}'
const response = await fetch("https://chat.api.co.id/api/v1/public/broadcast/send", {
method: "POST",
headers: {
"Authorization": "Bearer YOUR_API_KEY",
"Content-Type": "application/json"
},
body: JSON.stringify({
template_name: "promo_sale",
language: "id",
phone_numbers: ["+628123456789", "+628987654321"],
whatsapp_phone_number_id: "clyyy9876543210",
components: { "1": "50%" }
})
});
const { data } = await response.json();
console.log("Broadcast job ID:", data.job_id);
import requests
response = requests.post(
"https://chat.api.co.id/api/v1/public/broadcast/send",
headers={
"Authorization": "Bearer YOUR_API_KEY",
"Content-Type": "application/json"
},
json={
"template_name": "promo_sale",
"language": "id",
"phone_numbers": ["+628123456789", "+628987654321"],
"whatsapp_phone_number_id": "clyyy9876543210",
"components": { "1": "50%" }
}
)
data = response.json()["data"]
print("Broadcast job ID:", data["job_id"])
Response
{
"success": true,
"data": {
"job_id": "bcast_abc123",
"template_name": "promo_sale",
"total_recipients": 2,
"status": "PENDING",
"created_at": "2026-04-03T10:00:00.000Z"
}
}
Gunakan GET /api/v1/public/broadcast/jobs/:jobId untuk mengecek status pengiriman broadcast Anda.
Job Broadcast
Lihat daftar, detail, dan batalkan job broadcast. Pantau status pengiriman dan progres broadcast Anda.
GET /api/v1/public/broadcast/jobs
GET /api/v1/public/broadcast/jobs/:id
POST /api/v1/public/broadcast/jobs/:id/cancel
Query Parameter (Daftar)
| Parameter | Tipe | Wajib | Keterangan |
|---|---|---|---|
limit | number | tidak | Jumlah job yang dikembalikan (default 20) |
offset | number | tidak | Jumlah job yang dilewati untuk pagination (default 0) |
status | string | tidak | Filter berdasarkan status: "queued", "processing", "completed", "failed", "cancelled" |
Daftar Job Broadcast
- cURL
- JavaScript
- Python
curl -X GET "https://chat.api.co.id/api/v1/public/broadcast/jobs?limit=20&status=completed" \
-H "Authorization: Bearer YOUR_API_KEY"
const response = await fetch(
"https://chat.api.co.id/api/v1/public/broadcast/jobs?limit=20&status=completed",
{
headers: {
"Authorization": "Bearer YOUR_API_KEY"
}
}
);
const { data, pagination } = await response.json();
console.log("Jobs:", data);
import requests
response = requests.get(
"https://chat.api.co.id/api/v1/public/broadcast/jobs",
headers={"Authorization": "Bearer YOUR_API_KEY"},
params={"limit": 20, "status": "completed"}
)
result = response.json()
jobs = result["data"]
print("Jobs:", jobs)
Response Daftar Job
{
"success": true,
"data": [
{
"id": "bcast_abc123",
"template_name": "promo_sale",
"total_recipients": 150,
"sent_count": 150,
"failed_count": 3,
"status": "completed",
"created_at": "2026-04-01T08:00:00.000Z",
"completed_at": "2026-04-01T08:05:30.000Z"
},
{
"id": "bcast_def456",
"template_name": "welcome_message",
"total_recipients": 50,
"sent_count": 25,
"failed_count": 0,
"status": "processing",
"created_at": "2026-04-03T10:00:00.000Z",
"completed_at": null
}
],
"pagination": {
"total": 42,
"limit": 20,
"offset": 0
}
}
Detail Job
- cURL
- JavaScript
- Python
curl -X GET "https://chat.api.co.id/api/v1/public/broadcast/jobs/bcast_abc123" \
-H "Authorization: Bearer YOUR_API_KEY"
const response = await fetch(
"https://chat.api.co.id/api/v1/public/broadcast/jobs/bcast_abc123",
{
headers: {
"Authorization": "Bearer YOUR_API_KEY"
}
}
);
const { data } = await response.json();
console.log("Job status:", data.status);
import requests
response = requests.get(
"https://chat.api.co.id/api/v1/public/broadcast/jobs/bcast_abc123",
headers={"Authorization": "Bearer YOUR_API_KEY"}
)
data = response.json()["data"]
print("Job status:", data["status"])
Response Detail Job
{
"success": true,
"data": {
"id": "bcast_abc123",
"template_name": "promo_sale",
"language": "id",
"total_recipients": 150,
"sent_count": 150,
"failed_count": 3,
"status": "completed",
"whatsapp_phone_number_id": "clyyy9876543210",
"created_at": "2026-04-01T08:00:00.000Z",
"completed_at": "2026-04-01T08:05:30.000Z"
}
}
Batalkan Job Broadcast
- cURL
- JavaScript
- Python
curl -X POST "https://chat.api.co.id/api/v1/public/broadcast/jobs/bcast_def456/cancel" \
-H "Authorization: Bearer YOUR_API_KEY"
const response = await fetch(
"https://chat.api.co.id/api/v1/public/broadcast/jobs/bcast_def456/cancel",
{
method: "POST",
headers: {
"Authorization": "Bearer YOUR_API_KEY"
}
}
);
const { data } = await response.json();
console.log("Cancelled:", data.status);
import requests
response = requests.post(
"https://chat.api.co.id/api/v1/public/broadcast/jobs/bcast_def456/cancel",
headers={"Authorization": "Bearer YOUR_API_KEY"}
)
data = response.json()["data"]
print("Cancelled:", data["status"])
Response Pembatalan
{
"success": true,
"data": {
"id": "bcast_def456",
"status": "cancelled",
"total_recipients": 50,
"sent_count": 25,
"failed_count": 0,
"cancelled_at": "2026-04-03T10:05:00.000Z"
}
}
Catatan: Hanya job dengan status queued atau processing yang bisa dibatalkan. Pesan yang sudah terkirim tidak bisa ditarik kembali.
Coba langsung
Tekan Try it lalu tempel API key Anda (kc_live_...) ke kolom API key (Bearer). Dapatkan key dari API Keys. Request dijalankan ke akun live Anda, jadi endpoint yang mengirim, membuat, atau menghapus akan memengaruhi data sungguhan.
- POST/api/v1/public/broadcast/sendSend Broadcast
- GET/api/v1/public/broadcast/jobsList Broadcast Jobs
- GET/api/v1/public/broadcast/jobs/{id}Get Job Detail
- POST/api/v1/public/broadcast/jobs/{id}/cancelCancel Broadcast Job