NgirimWA Docs
API

Channel WhatsApp

Ambil daftar Channel WhatsApp perangkat, kirim atau jadwalkan postingan teks dan gambar, lalu cek statusnya lewat API.

Kirim postingan ke Channel WhatsApp yang dikelola nomor perangkat API key, misalnya untuk mengumumkan artikel baru atau promo dari sistem Anda sendiri.

Tersedia di paket Pro dan Enterprise. Nomor perangkat harus menjadi pemilik atau admin channel. Setiap postingan dihitung 1 pesan dari kuota bulanan. Untuk mengelola channel dari dashboard, lihat Kelola Channel WA.

Base URL   https://dash.ngirimwa.com/api/v1

x-api-key: API_KEY_ANDA
Content-Type: application/json
Idempotency-Key: <uuid-unik-per-postingan>     (opsional, sangat disarankan)
EndpointFungsi
GET /channelsDaftar channel yang dikelola perangkat
POST /channels/postsKirim sekarang atau jadwalkan postingan
GET /channels/posts/{post_id}Cek status satu postingan

Postingan ke channel memakai endpoint di halaman ini, bukan /messages/send.

Daftar Channel

GET /channels
{
  "success": true,
  "message": "Channels retrieved successfully",
  "data": {
    "channels": [
      {
        "id": "120363000000000001@newsletter",
        "name": "Promo Toko Maju Jaya",
        "role": "owner",
        "followers": 1250,
        "invite_link": "https://whatsapp.com/channel/xxxxxxxxxxxxxxxxxxxxxx"
      }
    ],
    "stale": false
  }
}
FieldArti
idID channel. Pakai sebagai channel_id saat posting
roleowner (pemilik) atau admin
followersJumlah pengikut
staletrue bila perangkat sedang terputus dan daftar diambil dari data terakhir

Tambahkan ?refresh=true untuk menarik ulang daftar dari WhatsApp, misalnya setelah nomor perangkat baru dijadikan admin sebuah channel.

Kirim Postingan

POST /channels/posts

Teks

{
  "channel_id": "120363000000000001@newsletter",
  "message": "*Promo Akhir Pekan*\nDiskon 20% semua produk sampai Minggu.\nhttps://domain-anda.com/promo"
}

Gambar

{
  "channel_id": "120363000000000001@newsletter",
  "message": "Koleksi terbaru sudah tersedia ๐Ÿ‘‡",
  "media": "https://domain-anda.com/images/koleksi.jpg",
  "media_type": "image"
}

Terjadwal

{
  "channel_id": "120363000000000001@newsletter",
  "message": "Live sale dimulai sekarang!",
  "scheduled_at": "2026-10-20T19:00:00+07:00"
}
FieldTipeWajibKeterangan
channel_idstringโœ…ID dari Daftar Channel. Angka tanpa @newsletter juga diterima
messagestringโœ… untuk teksIsi postingan, atau caption bila ada media. Maks. 4.096 karakter. Mendukung *tebal*, _miring_, ~coret~
mediastringโŒURL HTTPS publik sebuah gambar
media_typestringโœ… bila ada mediaSaat ini hanya image
scheduled_atstringโŒWaktu kirim (ISO 8601 dengan zona waktu), paling lambat 60 hari ke depan. Kosongkan untuk kirim sekarang
  • Gambar JPG dan PNG dikirim apa adanya. WebP, AVIF, dan format lain diubah otomatis ke JPG. Gambar lebih dari 5 MB diperkecil, dan ditolak bila tetap terlalu besar.
  • Idempotency-Key yang sama selalu mengembalikan postingan yang sama, jadi request yang diulang tidak membuat postingan ganda.
  • Bila perangkat sedang terputus sesaat, postingan menunggu sampai 30 menit lalu dikirim. Bila sesi perangkat sudah berakhir (perlu scan QR), request langsung ditolak dengan device_logged_out.

Respons

{
  "success": true,
  "message": "Channel post queued for delivery",
  "data": {
    "post_id": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxx1",
    "channel_id": "120363000000000001@newsletter",
    "status": "queued",
    "scheduled_at": null,
    "sent_at": null,
    "error": null,
    "created_at": "2026-10-15T02:00:00.000Z"
  }
}

Postingan terjadwal dijawab dengan "message": "Channel post scheduled" dan "status": "scheduled".

Cek Status Postingan

GET /channels/posts/{post_id}

Respons sama seperti Kirim Postingan, dengan status terbaru:

statusArti
scheduledMenunggu waktu kirim
queued, sendingMasuk antrean / sedang dikirim
sentSudah tampil di channel (sent_at terisi)
failedGagal; alasan di error.code dan error.message
cancelledDibatalkan dari dashboard sebelum terkirim
deletedDihapus dari channel

Kode error.code saat gagal: not_admin (nomor bukan admin channel), device_offline (perangkat terputus lebih dari 30 menit), device_logged_out, quota_exceeded, subscription_inactive, plan_feature_required, media_invalid, media_error, unconfirmed (WhatsApp tidak mengonfirmasi postingan), send_failed.

Contoh cURL

curl https://dash.ngirimwa.com/api/v1/channels \
  -H "x-api-key: API_KEY_ANDA"

curl -X POST https://dash.ngirimwa.com/api/v1/channels/posts \
  -H "x-api-key: API_KEY_ANDA" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: artikel-1024" \
  -d '{ "channel_id": "120363000000000001@newsletter", "message": "Artikel baru: Tips Jualan Online\nhttps://domain-anda.com/tips" }'

Error Khusus Channel

details.codeHTTPArti
plan_feature_required403Paket belum mendukung Channel. Upgrade ke Pro atau Enterprise
channel_not_found404Channel tidak ada, atau nomor perangkat bukan pemilik/admin channel itu
post_not_found404post_id tidak ada atau milik akun lain
media_download_failed400URL media tidak bisa diunduh
unsupported_media400media bukan gambar
media_too_large400Gambar tetap lebih dari 5 MB setelah diperkecil
device_not_connected409GET /channels: perangkat terputus dan belum ada daftar tersimpan

Kode umum lain (API key, kuota, rate limit, perangkat logout) ada di Penanganan Error.

On this page