Dokumentasi API

Hubungkan aplikasi Anda (billing, CRM, sistem internal) dengan eBilling Chat: kirim pesan WhatsApp lewat HTTP dan terima pesan masuk secara real-time lewat webhook.

1. Autentikasi

Admin membuat API key di menu API & Webhook. Kirim di setiap permintaan sebagai header:

Authorization: Bearer ebc_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

Batas 60 permintaan per menit per API key (HTTP 429 bila terlampaui). Simpan API key di server Anda, jangan di aplikasi peramban/HP.

2. Kirim pesan

POST https://chat.ebilling.co.id/v1.php?aksi=kirim — badan JSON:

curl -X POST 'https://chat.ebilling.co.id/v1.php?aksi=kirim' \
  -H 'Authorization: Bearer ebc_...' \
  -H 'Content-Type: application/json' \
  -d '{"nomor": "081234567890", "pesan": "Halo Budi, tagihan bulan ini Rp150.000.", "nama": "Budi"}'

Jawaban:

{"ok": true, "id": 1532, "nomor": "6281234567890", "status": "terkirim", "pesan": ""}

nomor boleh 08…, 8…, atau 62…. nama opsional (mengisi nama kontak bila kosong). Pesan muncul di Inbox dengan label "API". HTTP 502 bila WhatsApp belum terhubung/gagal.

3. Status WhatsApp

GET https://chat.ebilling.co.id/v1.php?aksi=status

{"ok": true, "terhubung": true, "nomor": "6281299998888"}

4. Riwayat pesan satu nomor

GET https://chat.ebilling.co.id/v1.php?aksi=pesan&nomor=6281234567890&sejak=0 — 100 pesan terbaru; isi sejak dengan id terakhir untuk mengambil yang lebih baru saja.

{"ok": true, "nomor": "6281234567890", "pesan": [{"id": 1530, "arah": "masuk", "teks": "Internet mati kak", "jenis": "teks", "status": "terkirim", "sumber": "wa", "media_tipe": null, "waktu": "2026-10-16 09:12:01"}]}

5. Daftar kontak

GET https://chat.ebilling.co.id/v1.php?aksi=kontak&cari=budi — maks. 200 kontak.

6. Webhook (pesan masuk real-time)

Admin mengisi URL penerima (https) di menu API & Webhook. Setiap pesan masuk dikirim sebagai POST JSON:

POST https://sistem-anda.id/webhook/whatsapp
X-EBC-Event: pesan.masuk
X-EBC-Signature: sha256=<HMAC-SHA256(badan, rahasia)>

{"event": "pesan.masuk", "waktu": "2026-10-16T09:12:01+07:00",
 "data": {"id": 1530, "wa_id": "3EB0...", "nomor": "6281234567890", "nama": "Budi",
          "teks": "Internet mati kak", "jenis": "teks", "media_tipe": null, "waktu": "2026-10-16 09:12:01"}}

Event lain: pesan.status ({"wa_id": [...], "status": "diterima"|"dibaca"}). Periksa tanda tangan sebelum memproses, contoh PHP:

$badan = file_get_contents('php://input');
$sah = hash_equals('sha256=' . hash_hmac('sha256', $badan, RAHASIA), $_SERVER['HTTP_X_EBC_SIGNATURE'] ?? '');
if (!$sah) { http_response_code(401); exit; }
$data = json_decode($badan, true);

Balas HTTP 2xx dalam 8 detik. Pengiriman tidak diulang otomatis bila gagal; gunakan aksi=pesan untuk menyusul.

Kode jawaban

200Berhasil
401API key tidak ada / salah / dinonaktifkan
404Aksi atau kontak tidak ditemukan
422Isian tidak sah
429Melebihi batas per menit
502WhatsApp belum terhubung / pengiriman gagal