Dokumentasi Client API
Client API Reference
Referensi lengkap untuk integrasi aplikasi klien. Terdiri dari User Management API (untuk mengontrol sesi WhatsApp Anda dengan batas kuota) dan Public Gateway API (untuk pengiriman pesan, broadcast aman, pengetikan, media, dan webhook).
Full reference for client integrations. Covers the User Management API (for managing your own WhatsApp sessions within your account quota) and the Public Gateway API (for text dispatches, safe broadcast batches, typing presence, media, and webhooks).
🔑 User API: Authorization: Bearer <JWT>
âš¡ Gateway API: Authorization: Bearer <API_TOKEN>
Autentikasi & Akun Pengguna
User Authentication & Profile
Login dengan username dan password Anda untuk mendapatkan JWT Token aktif.
Log in with your username and password to obtain an active JWT Bearer token.
| Field | Tipe | Wajib? | Deskripsi |
username | string | Ya (Yes) | Username terdaftar Anda. |
password | string | Ya (Yes) | Kata sandi akun Anda. |
curl -X POST "http://localhost:3000/api/auth/login" \
-H "Content-Type: application/json" \
-d '{
"username": "client_budi",
"password": "secretpassword"
}'
{
"success": true,
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
"user": {
"id": 2,
"username": "client_budi",
"role": "user",
"max_sessions": 3,
"status": "active",
"expires_at": "2026-12-31T23:59:59.000Z"
}
}
Mengecek profil akun sendiri, status masa aktif (expires_at), dan penggunaan kuota sesi.
Inspects your own user profile, expiration date (expires_at), and active session count.
curl -X GET "http://localhost:3000/api/auth/me" \
-H "Authorization: Bearer <YOUR_JWT_TOKEN>"
Mengganti password akun sendiri. Wajib menyertakan password lama yang benar.
Changes your account password. Requires verification of the current password.
curl -X POST "http://localhost:3000/api/auth/change-password" \
-H "Authorization: Bearer <YOUR_JWT_TOKEN>" \
-H "Content-Type: application/json" \
-d '{
"currentPassword": "oldPassword123",
"newPassword": "newSecretPassword456"
}'
Mengubah username akun Anda sendiri setelah memverifikasi password saat ini.
Updates your account username after confirming your current password.
curl -X PATCH "http://localhost:3000/api/auth/username" \
-H "Authorization: Bearer <YOUR_JWT_TOKEN>" \
-H "Content-Type: application/json" \
-d '{
"currentPassword": "myPassword123",
"newUsername": "budi_updated"
}'
Manajemen Sesi Pengguna (/api/user/*)
Client Session Management (/api/user/*)
Mengambil daftar sesi WhatsApp milik akun Anda, status koneksi, kuota maksimal (max_sessions), dan jumlah yang telah dipakai (used_sessions).
Retrieves all WhatsApp sessions owned by your account, current statuses, quota limit (max_sessions), and current count (used_sessions).
curl -X GET "http://localhost:3000/api/user/sessions" \
-H "Authorization: Bearer <YOUR_JWT_TOKEN>"
{
"success": true,
"sessions": [
{
"id": "c7a8b9d0-1234-5678-9abc-def012345678",
"user_id": 2,
"name": "WhatsApp CS Toko",
"api_token": "8f7e6d5c4b3a2109fedcba9876543210...",
"status": "connected",
"auto_reply_enabled": 1,
"watermark_enabled": 1,
"auto_delete_enabled": 0,
"auto_delete_delay": 30,
"created_at": "2026-09-15T09:00:00.000Z"
}
],
"max_sessions": 3,
"used_sessions": 1
}
Membuat sesi WhatsApp baru untuk akun Anda. Mengembalikan sessionId dan apiToken statis. Jika kuota Anda sudah penuh (used_sessions >= max_sessions), endpoint ini akan menolak dengan error HTTP 403 Forbidden.
Creates a new WhatsApp session slot under your account. Returns a sessionId and static apiToken. If your quota is reached (used_sessions >= max_sessions), returns an HTTP 403 Forbidden error.
| Field | Tipe | Wajib? | Deskripsi |
name | string | Ya (Yes) | Nama deskriptif untuk sesi ini. |
curl -X POST "http://localhost:3000/api/user/sessions" \
-H "Authorization: Bearer <YOUR_JWT_TOKEN>" \
-H "Content-Type: application/json" \
-d '{
"name": "WA Dispatcher 2"
}'
{
"success": true,
"sessionId": "b4a3c2d1-5678-90ab-cdef-1234567890ab",
"apiToken": "9e8d7c6b5a43210fedcba9876543210fedcba9876543210fedcba9876543210",
"message": "Session created. Please link your WhatsApp device via QR code or phone pairing code."
}
{
"error": "Limit kuota akun WhatsApp Anda telah tercapai (Maksimal 3 sesi). Silakan hubungi administrator untuk menambah kuota."
}
Mengambil data QR Code berupa base64 Data URL atau kode pairing 8 digit. Hanya dapat diakses oleh pemilik sesi tersebut.
Retrieves QR Code base64 Data URL or 8-digit pairing code. Accessible strictly by the session owner.
curl -X GET "http://localhost:3000/api/user/sessions/<SESSION_ID>/qr" \
-H "Authorization: Bearer <YOUR_JWT_TOKEN>"
Mereset koneksi dan memulai siklus pembuatan QR code baru untuk dipindai melalui aplikasi WhatsApp HP Anda.
Resets connection and triggers generation of a fresh QR code to scan from your phone.
curl -X POST "http://localhost:3000/api/user/sessions/<SESSION_ID>/connect" \
-H "Authorization: Bearer <YOUR_JWT_TOKEN>"
Meminta kode pairing 8-digit WhatsApp untuk ditautkan secara langsung menggunakan nomor handphone tanpa perlu kamera scan QR.
Requests an 8-digit phone pairing code for camera-less linking on mobile devices.
curl -X POST "http://localhost:3000/api/user/sessions/<SESSION_ID>/pair" \
-H "Authorization: Bearer <YOUR_JWT_TOKEN>" \
-H "Content-Type: application/json" \
-d '{
"phoneNumber": "6281234567890"
}'
Mengubah pengaturan sesi: watermark (> Developed by JSGDEV), toggle auto reply, serta server-side auto delete (hanya menghapus pesan di HP pengirim setelah delay detik yang ditentukan).
Updates session operational settings: watermark text (> Developed by JSGDEV), auto reply toggle, and server-side auto-delete (deletes only on the server's phone after specified delay).
| Field | Tipe | Deskripsi |
watermark_enabled | boolean | Aktifkan footer watermark teks. |
auto_reply_enabled | boolean | Aktifkan respon balas otomatis. |
auto_delete_enabled | boolean | Aktifkan auto delete di sisi HP server. |
auto_delete_delay | number | Jeda waktu dalam detik (1 - 86400). Default: 30. |
curl -X PATCH "http://localhost:3000/api/user/sessions/<SESSION_ID>/settings" \
-H "Authorization: Bearer <YOUR_JWT_TOKEN>" \
-H "Content-Type: application/json" \
-d '{
"watermark_enabled": false,
"auto_reply_enabled": true,
"auto_delete_enabled": true,
"auto_delete_delay": 30
}'
Menghapus sesi WhatsApp milik Anda secara permanen. Menghapus sesi ini akan mengembalikan 1 slot kuota (used_sessions berkurang 1).
Permanently deletes your WhatsApp session, freeing up 1 slot in your account quota (used_sessions decrements by 1).
curl -X DELETE "http://localhost:3000/api/user/sessions/<SESSION_ID>" \
-H "Authorization: Bearer <YOUR_JWT_TOKEN>"
Konfigurasi Webhook & Auto-Reply Klien
Client Webhooks & Auto-Reply Rules
Mengambil pengaturan webhook sesi Anda saat ini, termasuk daftar chain_urls.
Fetches current webhook settings for your session, including configured chain_urls.
curl -X GET "http://localhost:3000/api/user/sessions/<SESSION_ID>/webhook" \
-H "Authorization: Bearer <YOUR_JWT_TOKEN>"
Mengatur URL webhook penerima event. Mendukung chain_urls untuk meneruskan event ke beberapa webhook URL secara berurutan.
Updates webhook destination URL. Supports chain_urls to broadcast event payloads to multiple backend servers.
curl -X PATCH "http://localhost:3000/api/user/sessions/<SESSION_ID>/webhook" \
-H "Authorization: Bearer <YOUR_JWT_TOKEN>" \
-H "Content-Type: application/json" \
-d '{
"enabled": true,
"url": "https://api.mywebsite.com/wa/webhook",
"secret": "mySuperSecretSignatureKey",
"chain_urls": [
"https://backup-api.mywebsite.com/wa/webhook"
]
}'
Melihat aturan auto reply pada sesi Anda. (Dapat juga diakses via gateway GET /api/auto-replies menggunakan API Token sesi).
Lists auto reply keyword rules for your session. (Also accessible via gateway GET /api/auto-replies using API Token).
curl -X GET "http://localhost:3000/api/user/sessions/<SESSION_ID>/auto-replies" \
-H "Authorization: Bearer <YOUR_JWT_TOKEN>"
Membuat aturan auto-reply baru pada sesi Anda. Format wildcard: *kata*.
Creates an auto-reply rule on your session. Supports wildcards: *keyword*.
curl -X POST "http://localhost:3000/api/user/sessions/<SESSION_ID>/auto-replies" \
-H "Authorization: Bearer <YOUR_JWT_TOKEN>" \
-H "Content-Type: application/json" \
-d '{
"keyword": "*katalog*",
"reply_text": "Katalog produk terbaru kami ada di https://katalog.example.com"
}'
Menghapus aturan auto-reply milik sesi Anda. Sistem memverifikasi kepemilikan aturan secara ketat.
Deletes an auto reply rule. Enforces tenant ownership strictly.
curl -X DELETE "http://localhost:3000/api/user/auto-replies/1" \
-H "Authorization: Bearer <YOUR_JWT_TOKEN>"
Gateway WhatsApp REST API (/api/*)
WhatsApp Gateway REST API (/api/*)
Catatan Autentikasi Gateway: Seluruh endpoint di bawah ini menggunakan Session API Token statis (64 karakter) dalam header: Authorization: Bearer <SESSION_API_TOKEN>.
Gateway Authentication Note: All endpoints below require your static 64-character Session API Token: Authorization: Bearer <SESSION_API_TOKEN>.
Mengirimkan pesan teks WhatsApp ke satu nomor atau array nomor tujuan. Mendukung proteksi anti-ban (simulasi pengetikan alami) dan opsi override auto-delete per pesan.
Dispatches a plain text WhatsApp message to a single recipient or array of numbers. Features human typing simulation (anti-ban) and per-message auto-delete overrides.
| Field | Tipe | Wajib? | Deskripsi |
to | string | string[] | Ya (Yes) | Nomor tujuan (e.g. "628123456789" atau ["6281...", "6282..."]). |
text | string | Ya (Yes) | Isi teks pesan WhatsApp. |
antiBan | boolean | Tidak (Opt) | Simulasi pengetikan alami (Default: true). |
autoDelete | boolean | Tidak (Opt) | Override setting auto-delete di HP server untuk pesan ini. |
autoDeleteDelay | number | Tidak (Opt) | Jeda auto-delete dalam detik (1 - 86400). |
curl -X POST "http://localhost:3000/api/send" \
-H "Authorization: Bearer <YOUR_SESSION_API_TOKEN>" \
-H "Content-Type: application/json" \
-d '{
"to": "628123456789",
"text": "Halo! Pesan konfirmasi pesanan #1092 telah berhasil diproses."
}'
{
"success": true,
"message": "Message sent",
"messageId": "3EB04F1A2B3C4D5E"
}
Mengirimkan media berupa gambar (image), dokumen PDF/Office (document), video, atau audio/Voice Note (PTT) melalui URL publik atau data base64 string.
Sends rich media: images, PDF/Office documents, videos, or audio/voice notes (PTT) via remote URL or base64 string.
| Field | Tipe | Wajib? | Deskripsi |
to | string | Ya (Yes) | Nomor tujuan penerima (e.g. "628123456789"). |
type | string | Ya (Yes) | 'image', 'video', 'document', atau 'audio'. |
url | string | Kondisional | URL publik file media (wajib jika tidak ada base64). |
base64 | string | Kondisional | Base64 encoded string (wajib jika tidak ada url). |
caption | string | Tidak (Opt) | Keterangan teks untuk gambar, video, atau dokumen. |
fileName | string | Tidak (Opt) | Nama file untuk dokumen (e.g. "Invoice_2026.pdf"). |
mimetype | string | Tidak (Opt) | MIME type spesifik (e.g. "application/pdf"). |
ptt | boolean | Tidak (Opt) | Set true untuk mengirim audio sebagai Push-To-Talk Voice Note. |
curl -X POST "http://localhost:3000/api/send-media" \
-H "Authorization: Bearer <YOUR_SESSION_API_TOKEN>" \
-H "Content-Type: application/json" \
-d '{
"to": "628123456789",
"type": "image",
"url": "https://images.unsplash.com/photo-1579202673506-ca3ce28943ef",
"caption": "Foto Produk Terbaru 2026"
}'
curl -X POST "http://localhost:3000/api/send-media" \
-H "Authorization: Bearer <YOUR_SESSION_API_TOKEN>" \
-H "Content-Type: application/json" \
-d '{
"to": "628123456789",
"type": "document",
"url": "https://www.w3.org/WAI/ER/tests/xhtml/testfiles/resources/pdf/dummy.pdf",
"fileName": "Laporan_Keuangan_2026.pdf",
"mimetype": "application/pdf",
"caption": "Silakan unduh dokumen terlampir."
}'
Menyiarkan pesan teks atau media ke daftar nomor telepon secara berurutan. Gateway memvalidasi setiap nomor terlebih dahulu, menyimulasikan pengetikan, menerapkan jeda acak (jitter) untuk keamanan anti-ban, dan mengembalikan laporan audit pengiriman.
Broadcasts text or media sequentially across an array of numbers. Validates each recipient, simulates typing, enforces randomized jitter delays for anti-spam safety, and returns a detailed delivery audit report.
| Field | Tipe | Wajib? | Deskripsi |
toNumbers | string[] | Ya (Yes) | Array nomor telepon target broadcast. |
text | string | Kondisional | Pesan teks broadcast. |
media | object | Kondisional | Objek media: { "type": "image", "url": "..." }. |
delayMs | number | Tidak (Opt) | Jeda dasar antar pesan dalam milidetik (min: 1000, default: 2500). |
curl -X POST "http://localhost:3000/api/broadcast" \
-H "Authorization: Bearer <YOUR_SESSION_API_TOKEN>" \
-H "Content-Type: application/json" \
-d '{
"toNumbers": ["628123456789", "628987654321"],
"text": "Pengumuman Pemeliharaan Server pada pukul 23:00 WIB.",
"delayMs": 3000
}'
{
"success": true,
"successCount": 2,
"failCount": 0,
"errors": []
}
Memeriksa apakah satu atau beberapa nomor telepon aktif terdaftar di WhatsApp.
Validates whether one or more phone numbers are actively registered on WhatsApp.
curl -X POST "http://localhost:3000/api/validate-number" \
-H "Authorization: Bearer <YOUR_SESSION_API_TOKEN>" \
-H "Content-Type: application/json" \
-d '{
"numbers": ["628123456789", "628999999999"]
}'
{
"success": true,
"results": [
{ "number": "628123456789", "exists": true, "jid": "628123456789@s.whatsapp.net" },
{ "number": "628999999999", "exists": false, "jid": null }
]
}
Mengirimkan indikator mengetik (composing presence) ke chat penerima selama durasi tertentu (1000 - 30000 ms).
Sends a composing typing indicator to the recipient chat for a bounded duration (1000 - 30000 ms).
curl -X POST "http://localhost:3000/api/typing" \
-H "Authorization: Bearer <YOUR_SESSION_API_TOKEN>" \
-H "Content-Type: application/json" \
-d '{
"to": "628123456789",
"durationMs": 4000
}'
Mengambil daftar seluruh grup WhatsApp yang diikuti oleh nomor sesi ini.
Fetches metadata for all WhatsApp groups joined by this session's phone number.
{
"success": true,
"groups": [
{
"id": "1203630284918234@g.us",
"subject": "Customer Community Group",
"participants": 42
}
]
}
Menarik / menghapus pesan yang pernah dikirim untuk semua orang (Delete For Everyone).
Revokes a previously sent message for everyone in the recipient chat.
curl -X POST "http://localhost:3000/api/delete-message" \
-H "Authorization: Bearer <YOUR_SESSION_API_TOKEN>" \
-H "Content-Type: application/json" \
-d '{
"to": "628123456789",
"messageId": "3EB04F1A2B3C4D5E"
}'
Memutuskan koneksi socket WhatsApp dan menghapus kredensial autentikasi lokal sesi ini.
Logs out and terminates the WhatsApp session, clearing its local authentication credentials.
curl -X POST "http://localhost:3000/api/disconnect" \
-H "Authorization: Bearer <YOUR_SESSION_API_TOKEN>"
Mengambil QR code atau pairing code secara langsung menggunakan API token sesi.
Retrieves QR code image or pairing code authenticated via the session API token.
curl -X GET "http://localhost:3000/api/qr" \
-H "Authorization: Bearer <YOUR_SESSION_API_TOKEN>"
Spesifikasi Payload Event Webhook
Webhook Event Payload Specifications
Ketika webhook diaktifkan, server WA Gateway akan mengirimkan request HTTP POST dengan header Content-Type: application/json dan opsional X-Webhook-Secret jika Anda mengonfigurasi secret key.
When webhooks are enabled, the WA Gateway server dispatches HTTP POST requests with Content-Type: application/json and optional X-Webhook-Secret headers.
{
"event": "incoming",
"sessionId": "b4a3c2d1-5678-90ab-cdef-1234567890ab",
"message": {
"id": "3EB048FBDD307A8CF5BCAE",
"from": "628123456789@s.whatsapp.net",
"fromMe": false,
"text": "Halo, saya ingin menanyakan jam operasional toko.",
"timestamp": 1788960613,
"type": "text"
}
}
{
"event": "connected",
"sessionId": "b4a3c2d1-5678-90ab-cdef-1234567890ab",
"status": "connected"
}
{
"event": "message_status",
"sessionId": "b4a3c2d1-5678-90ab-cdef-1234567890ab",
"status": 3,
"key": {
"remoteJid": "628123456789@s.whatsapp.net",
"id": "3EB048FBDD307A8CF5BCAE",
"fromMe": true
}
}