Kirim Pesan

Lima endpoint di bawah mengirim satu pesan WhatsApp lewat perangkat pemilik kunci API pada header Api-Key. Semuanya butuh field target dalam format yang sama.

Format target

Nomor pribadi: kode negara diikuti nomor, tanpa 0 atau + di depan, diakhiri @s.whatsapp.net. Grup: ID numerik grup diakhiri @g.us.

  • Benar: 628123456789@s.whatsapp.net
  • Salah: 08123456789@s.whatsapp.net (pakai 0 lokal, bukan kode negara)
  • Salah: +628123456789@s.whatsapp.net (tanpa +)
POST/chat/send-text

Pesan Teks

NamaTipeWajibKeterangan
targetstringYaJID tujuan, lihat format di atas.
messagestringYaIsi pesan, minimal 3 karakter.
is_forwardedbooleanTidakTandai sebagai pesan diteruskan. Default false.
cURL
curl -X POST https://api.wangsaf.com/v1/chat/send-text \
  -H "Api-Key: <API_KEY_PERANGKAT>" \
  -H "Content-Type: application/json" \
  -d '{
    "target": "628123456789@s.whatsapp.net",
    "message": "Halo dari Wangsaf!"
  }'
Respons 200
{
  "status": 200,
  "message": "Message sent successfully.",
  "data": {
    "type": "Text",
    "action": "Sent",
    "chat_id": "3EB0C767D097B3B0F1C9",
    "timestamp": 1758012345
  }
}

action berisi teks status apa adanya dari gateway pengirim dan boleh berubah sewaktu-waktu, jangan dijadikan dasar logic. Field yang stabil untuk dicek: type, chat_id, dan timestamp.

POST/chat/send-template

Pesan Template

Mengirim pesan dari template pesan milik perangkat tersebut (dibuat lewat dashboard). Placeholder di isi template ditulis {nama_variabel} dan diisi lewat objek variable.

NamaTipeWajibKeterangan
targetstringYaJID tujuan, lihat format di atas.
templatestringYaNama template tersimpan. Huruf, angka, dan garis bawah saja.
variableobjectYaPasangan kunci-nilai untuk mengisi placeholder template, nilai berupa teks.
is_forwardedbooleanTidakTandai sebagai pesan diteruskan. Default false.
cURL
curl -X POST https://api.wangsaf.com/v1/chat/send-template \
  -H "Api-Key: <API_KEY_PERANGKAT>" \
  -H "Content-Type: application/json" \
  -d '{
    "target": "628123456789@s.whatsapp.net",
    "template": "konfirmasi_pesanan",
    "variable": { "nama": "Budi", "kode": "INV-2026-0912" }
  }'
Respons 200
{
  "status": 200,
  "message": "Message sent successfully.",
  "data": {
    "type": "Template",
    "action": "Sent",
    "chat_id": "3EB0C767D097B3B0F1C9",
    "timestamp": 1758012345,
    "template": "konfirmasi_pesanan"
  }
}

Kegagalan khusus template (HTTP 400):

  • Template tidak ditemukan untuk perangkat ini: "Message template was not found for this device."
  • Ada placeholder di template tanpa nilai di variable: "The :key variable is required in the variable payload."
  • Hasil setelah placeholder diisi kurang dari 3 karakter: "Substituted text must be at least 3 characters long."

action berisi teks status apa adanya dari gateway pengirim dan boleh berubah sewaktu-waktu, jangan dijadikan dasar logic. Field yang stabil untuk dicek: type, chat_id, dan timestamp.

POST/chat/send-image

Pesan Gambar

Body dikirim sebagai multipart/form-data, bukan JSON, karena ada berkas gambar di dalamnya.

NamaTipeWajibKeterangan
targetstringYaJID tujuan, lihat format di atas.
messagestringYaKeterangan gambar, minimal 3 karakter.
imagefileYaJPEG/PNG/JPG, maksimal 5 MB.
is_forwardedbooleanTidakTandai sebagai pesan diteruskan. Default false.
cURL
curl -X POST https://api.wangsaf.com/v1/chat/send-image \
  -H "Api-Key: <API_KEY_PERANGKAT>" \
  -F "target=628123456789@s.whatsapp.net" \
  -F "message=Katalog produk terbaru" \
  -F "image=@katalog.jpg"
Respons 200
{
  "status": 200,
  "message": "Message sent successfully.",
  "data": {
    "type": "Image",
    "action": "Sent",
    "chat_id": "3EB0C767D097B3B0F1C9",
    "timestamp": 1758012345
  }
}

action berisi teks status apa adanya dari gateway pengirim dan boleh berubah sewaktu-waktu, jangan dijadikan dasar logic. Field yang stabil untuk dicek: type, chat_id, dan timestamp.

POST/chat/send-document

Pesan Dokumen

Sama seperti pesan gambar, dikirim sebagai multipart/form-data.

NamaTipeWajibKeterangan
targetstringYaJID tujuan, lihat format di atas.
documentfileYaPDF, Word, Excel, atau PowerPoint, maksimal 10 MB.
is_forwardedbooleanTidakTandai sebagai pesan diteruskan. Default false.
cURL
curl -X POST https://api.wangsaf.com/v1/chat/send-document \
  -H "Api-Key: <API_KEY_PERANGKAT>" \
  -F "target=628123456789@s.whatsapp.net" \
  -F "document=@invoice-INV-2026-0912.pdf"
Respons 200
{
  "status": 200,
  "message": "Message sent successfully.",
  "data": {
    "type": "Document",
    "action": "Sent",
    "chat_id": "3EB0C767D097B3B0F1C9",
    "timestamp": 1758012345
  }
}

action berisi teks status apa adanya dari gateway pengirim dan boleh berubah sewaktu-waktu, jangan dijadikan dasar logic. Field yang stabil untuk dicek: type, chat_id, dan timestamp.

POST/chat/send-location

Pesan Lokasi

NamaTipeWajibKeterangan
targetstringYaJID tujuan, lihat format di atas.
messagestringYaLabel lokasi, minimal 3 karakter.
latitudenumberYaGaris lintang.
longitudenumberYaGaris bujur.
is_forwardedbooleanTidakTandai sebagai pesan diteruskan. Default false.
cURL
curl -X POST https://api.wangsaf.com/v1/chat/send-location \
  -H "Api-Key: <API_KEY_PERANGKAT>" \
  -H "Content-Type: application/json" \
  -d '{
    "target": "628123456789@s.whatsapp.net",
    "message": "Gudang Utama",
    "latitude": -7.797068,
    "longitude": 110.370529
  }'
Respons 200
{
  "status": 200,
  "message": "Message sent successfully.",
  "data": {
    "type": "Location",
    "action": "Sent",
    "chat_id": "3EB0C767D097B3B0F1C9",
    "timestamp": 1758012345
  }
}

action berisi teks status apa adanya dari gateway pengirim dan boleh berubah sewaktu-waktu, jangan dijadikan dasar logic. Field yang stabil untuk dicek: type, chat_id, dan timestamp.