Dokumentasi Admin API

Admin API Reference

Referensi lengkap untuk Superadministrator. Digunakan untuk memanajemen seluruh pengguna sistem, mengatur kuota sesi WhatsApp (max_sessions), masa berlaku akun (expires_at), melihat seluruh sesi secara global, dan mengatur konfigurasi server.

Comprehensive developer reference for Superadministrators. Used to provision users, regulate WhatsApp session quota limits (max_sessions), manage account expiration (expires_at), inspect global sessions, and control system toggles.

🛡️ Role: admin only 🔑 Header: Authorization: Bearer <JWT> 🌐 Base Route: /api/admin/* (alias: /admin/api/*)

Autentikasi & Akun Authentication & Profile

POST /api/auth/login Public (No Auth Required)

Melakukan login ke sistem dan mengembalikan JWT token 7 hari serta profil lengkap pengguna/admin. Authenticates administrator or client credentials, returning a 7-day JWT token and user profile metadata.

Request Body (JSON)
FieldTipeWajib?Deskripsi
usernamestringYa (Yes)Username akun admin/user.
passwordstringYa (Yes)Kata sandi akun.
Contoh Request (cURL)
Bash
curl -X POST "http://localhost:3000/api/auth/login" \
  -H "Content-Type: application/json" \
  -d '{
    "username": "admin",
    "password": ""
  }'
Contoh Respons Sukses (200 OK)
JSON
{
  "success": true,
  "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
  "user": {
    "id": 1,
    "username": "admin",
    "role": "admin",
    "max_sessions": 100,
    "status": "active",
    "expires_at": null
  }
}
GET /api/auth/me Bearer JWT

Mengambil data profil pengguna yang sedang login beserta jumlah sesi aktif yang telah digunakan. Fetches the currently authenticated profile along with active session usage statistics.

Contoh Request (cURL)
Bash
curl -X GET "http://localhost:3000/api/auth/me" \
  -H "Authorization: Bearer <ADMIN_JWT_TOKEN>"
Contoh Respons (200 OK)
JSON
{
  "success": true,
  "user": {
    "id": 1,
    "username": "admin",
    "role": "admin",
    "max_sessions": 100,
    "status": "active",
    "expires_at": null,
    "created_at": "2026-09-01T08:00:00.000Z",
    "active_sessions": 4
  }
}
POST /api/auth/change-password Bearer JWT

Memperbarui password akun admin sendiri dengan validasi password lama terlebih dahulu. Updates the authenticated admin's own password, requiring validation of current password.

Request Body (JSON)
FieldTipeWajib?Deskripsi
currentPasswordstringYa (Yes)Password lama yang aktif.
newPasswordstringYa (Yes)Password baru (minimal 6 karakter).
Bash
curl -X POST "http://localhost:3000/api/auth/change-password" \
  -H "Authorization: Bearer <ADMIN_JWT_TOKEN>" \
  -H "Content-Type: application/json" \
  -d '{
    "currentPassword": "",
    "newPassword": "superSecureNewPassword2026"
  }'
PATCH /api/auth/username Bearer JWT

Mengubah username akun sendiri setelah memverifikasi password saat ini. Modifies current account username after confirming current password.

Request Body (JSON)
FieldTipeWajib?Deskripsi
currentPasswordstringYa (Yes)Password saat ini untuk verifikasi.
newUsernamestringYa (Yes)Username baru (3-50 karakter).
Bash
curl -X PATCH "http://localhost:3000/api/auth/username" \
  -H "Authorization: Bearer <ADMIN_JWT_TOKEN>" \
  -H "Content-Type: application/json" \
  -d '{
    "currentPassword": "mySecretPassword",
    "newUsername": "superadmin"
  }'

Manajemen Pengguna (User Management) User Management (Superadmin Only)

GET /api/admin/users Role: admin

Mendapatkan daftar seluruh pengguna terdaftar di sistem beserta kuota sesi maksimal dan jumlah sesi yang sedang aktif. Retrieves all registered users in the database, including quota allocations and active session counts.

cURL
curl -X GET "http://localhost:3000/api/admin/users" \
  -H "Authorization: Bearer <ADMIN_JWT_TOKEN>"
Response (200 OK)
{
  "success": true,
  "users": [
    {
      "id": 1,
      "username": "admin",
      "role": "admin",
      "max_sessions": 100,
      "status": "active",
      "expires_at": null,
      "created_at": "2026-09-01T08:00:00.000Z",
      "active_sessions": 2
    },
    {
      "id": 2,
      "username": "joko_client",
      "role": "user",
      "max_sessions": 3,
      "status": "active",
      "expires_at": "2026-12-31T23:59:59.000Z",
      "created_at": "2026-09-10T12:00:00.000Z",
      "active_sessions": 1
    }
  ]
}
POST /api/admin/users Role: admin

Mendaftarkan akun pengguna baru dengan menetapkan kuota sesi WhatsApp (max_sessions), peran, dan opsional tanggal kedaluwarsa akun. Creates a new user account with specified session quota limits, role, and optional account expiration.

Request Body (JSON)
FieldTipeWajib?Deskripsi
usernamestringYa (Yes)Username unik (minimal 3 karakter).
passwordstringYa (Yes)Password login (minimal 6 karakter).
max_sessionsnumberTidak (Opt)Batas maksimal sesi WA (Default: 2).
rolestringTidak (Opt)'user' (default) atau 'admin'.
expires_atstring|nullTidak (Opt)ISO 8601 string tanggal kedaluwarsa atau null.
cURL
curl -X POST "http://localhost:3000/api/admin/users" \
  -H "Authorization: Bearer <ADMIN_JWT_TOKEN>" \
  -H "Content-Type: application/json" \
  -d '{
    "username": "client_budi",
    "password": "budiSecretPassword123",
    "max_sessions": 5,
    "role": "user",
    "expires_at": "2026-12-31T23:59:59.000Z"
  }'
Response (200 OK)
{
  "success": true,
  "message": "User \"client_budi\" created successfully.",
  "user": {
    "id": 3,
    "username": "client_budi",
    "role": "user",
    "max_sessions": 5,
    "status": "active",
    "expires_at": "2026-12-31T23:59:59.000Z"
  }
}
PATCH /api/admin/users/:id Role: admin

Memperbarui kuota sesi, status akun (active / suspended), reset password pengguna, role, atau masa berlaku. Jika akun di-suspend, semua socket sesi WhatsApp milik user tersebut akan langsung diputus secara otomatis. Updates session quota, account status (active / suspended), password reset, role, or expiration. Suspending a user immediately disconnects all their active WhatsApp sockets.

Request Body (JSON)
FieldTipeDeskripsi
max_sessionsnumberUbah batas kuota sesi WhatsApp akun ini.
statusstring'active' atau 'suspended'.
newPasswordstringReset password pengguna baru (min 6 karakter).
rolestring'user' atau 'admin'.
expires_atstring|nullISO date string atau null untuk unlimited.
cURL - Naikkan Kuota & Aktifkan
curl -X PATCH "http://localhost:3000/api/admin/users/3" \
  -H "Authorization: Bearer <ADMIN_JWT_TOKEN>" \
  -H "Content-Type: application/json" \
  -d '{
    "max_sessions": 10,
    "status": "active"
  }'
DELETE /api/admin/users/:id Role: admin

Menghapus akun pengguna secara permanen. Seluruh sesi WhatsApp milik akun tersebut akan diputus koneksinya, kredensial auth lokal dihapus, dan data dihapus dari SQLite. Permanently deletes a user account. Automatically terminates all WhatsApp sockets, purges credentials from disk, and cascades deletions in SQLite.

cURL
curl -X DELETE "http://localhost:3000/api/admin/users/3" \
  -H "Authorization: Bearer <ADMIN_JWT_TOKEN>"

Manajemen Sesi Global (System-Wide Sessions) System-Wide Session Management

GET /api/admin/all-sessions Role: admin

Melihat seluruh sesi WhatsApp yang ada di sistem lintas semua pengguna, status koneksi, pemilik sesi, dan status auto-delete. Global system audit: lists all WhatsApp sessions across all users with ownership metadata, connection states, and toggle states.

cURL
curl -X GET "http://localhost:3000/api/admin/all-sessions" \
  -H "Authorization: Bearer <ADMIN_JWT_TOKEN>"
Response (200 OK)
{
  "success": true,
  "sessions": [
    {
      "id": "e229e612-3bdc-4ad0-a9cb-b0cbdb7946bf",
      "user_id": 2,
      "name": "WA Support Toko",
      "api_token": "a1b2c3d4e5f6...",
      "status": "connected",
      "auto_reply_enabled": 1,
      "watermark_enabled": 0,
      "auto_delete_enabled": 1,
      "auto_delete_delay": 30,
      "created_at": "2026-09-20T10:00:00.000Z",
      "owner_username": "joko_client",
      "owner_status": "active"
    }
  ]
}
POST /api/admin/sessions Role: admin

Membuat sesi WhatsApp baru untuk admin sendiri atau meng-assign langsung ke pengguna tertentu via user_id. Provisions a new WhatsApp session directly, either for the administrator or assigned to a specific user_id.

Request Body (JSON)
FieldTipeWajib?Deskripsi
namestringYa (Yes)Nama deskriptif sesi WhatsApp.
user_idnumberTidak (Opt)ID pengguna pemilik sesi. Default: admin id.
cURL
curl -X POST "http://localhost:3000/api/admin/sessions" \
  -H "Authorization: Bearer <ADMIN_JWT_TOKEN>" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Official Admin Dispatcher",
    "user_id": 1
  }'
GET /api/admin/sessions/:id/qr Role: admin

Mengambil data QR code (berupa base64 image data URL) atau pairing code 8 digit untuk sesi tertentu. Retrieves current QR code data URL or pairing code for a specific session.

cURL
curl -X GET "http://localhost:3000/api/admin/sessions/<SESSION_ID>/qr" \
  -H "Authorization: Bearer <ADMIN_JWT_TOKEN>"
POST /api/admin/sessions/:id/connect Role: admin

Memicu inisialisasi koneksi ulang via QR code baru untuk sesi tersebut. Triggers a fresh QR code connection attempt for the given session.

cURL
curl -X POST "http://localhost:3000/api/admin/sessions/<SESSION_ID>/connect" \
  -H "Authorization: Bearer <ADMIN_JWT_TOKEN>"
POST /api/admin/sessions/:id/pair Role: admin

Meminta kode pairing 8-digit dari WhatsApp menggunakan nomor telepon. Requests an 8-digit WhatsApp phone pairing code for headless onboarding.

cURL
curl -X POST "http://localhost:3000/api/admin/sessions/<SESSION_ID>/pair" \
  -H "Authorization: Bearer <ADMIN_JWT_TOKEN>" \
  -H "Content-Type: application/json" \
  -d '{
    "phoneNumber": "6281234567890"
  }'
PATCH /api/admin/sessions/:id/settings Role: admin

Memodifikasi fitur toggle sesi: watermark ('> Developed by JSGDEV'), auto reply, serta server-side auto-delete dan jeda delay-nya (1 - 86400 detik). Updates operational session toggles: watermark ('> Developed by JSGDEV'), auto reply, and server-side auto-delete with custom delay (1 - 86400s).

Request Body (JSON)
FieldTipeDeskripsi
watermark_enabledbooleanAktifkan/nonaktifkan footer watermark.
auto_reply_enabledbooleanAktifkan/nonaktifkan fitur balas otomatis kata kunci.
auto_delete_enabledbooleanAktifkan/nonaktifkan auto delete di HP server.
auto_delete_delaynumberJeda waktu dalam detik sebelum pesan terhapus (1 - 86400).
cURL
curl -X PATCH "http://localhost:3000/api/admin/sessions/<SESSION_ID>/settings" \
  -H "Authorization: Bearer <ADMIN_JWT_TOKEN>" \
  -H "Content-Type: application/json" \
  -d '{
    "watermark_enabled": false,
    "auto_reply_enabled": true,
    "auto_delete_enabled": true,
    "auto_delete_delay": 60
  }'
DELETE /api/admin/sessions/:id Role: admin

Menghapus sesi WhatsApp secara permanen, memutus socket Baileys, dan membersihkan folder sesi dari server. Permanently deletes a WhatsApp session, terminates the Baileys socket, and wipes credentials from disk.

cURL
curl -X DELETE "http://localhost:3000/api/admin/sessions/<SESSION_ID>" \
  -H "Authorization: Bearer <ADMIN_JWT_TOKEN>"

Konfigurasi Webhook & Aturan Balas Otomatis Webhook Configuration & Auto-Replies

GET /api/admin/sessions/:id/webhook Role: admin

Mengambil konfigurasi webhook untuk sesi tertentu, termasuk status aktif, URL tujuan, secret key signature, dan daftar chain URLs. Fetches session webhook parameters: enabled toggle, target URL, signature secret, and configured chain URLs.

Response (200 OK)
{
  "success": true,
  "webhook": {
    "enabled": true,
    "url": "https://api.domain.com/webhook",
    "events": "incoming,connected,disconnected,message_status",
    "secret": "mySecretWebhookKey",
    "chain_urls": [
      "https://backup.domain.com/webhook"
    ]
  }
}
PATCH /api/admin/sessions/:id/webhook Role: admin

Memperbarui konfigurasi webhook sesi. Perubahan langsung aktif di memori tanpa perlu restart server. Updates session webhook settings. Cache updates instantly in memory without needing server reboot.

cURL
curl -X PATCH "http://localhost:3000/api/admin/sessions/<SESSION_ID>/webhook" \
  -H "Authorization: Bearer <ADMIN_JWT_TOKEN>" \
  -H "Content-Type: application/json" \
  -d '{
    "enabled": true,
    "url": "https://api.example.com/wa/webhook",
    "secret": "webhookSignatureKey123",
    "chain_urls": ["https://secondary.example.com/wa/webhook"]
  }'
GET /api/admin/sessions/:id/auto-replies Role: admin

Melihat seluruh daftar aturan auto reply yang terpasang pada sesi tertentu. Lists all auto reply keyword rules attached to the specified session.

Response (200 OK)
{
  "success": true,
  "autoReplies": [
    {
      "id": 1,
      "keyword": "*harga*",
      "reply_text": "Daftar harga layanan kami dapat dilihat di https://example.com/pricing"
    }
  ]
}
POST /api/admin/sessions/:id/auto-replies Role: admin

Menambahkan aturan balas otomatis baru. Gunakan tanda bintang *kata* untuk pencarian substring (contains), atau tanpa bintang untuk pencarian persis (exact match). Adds a new auto reply rule. Wrap keywords with asterisks *word* for wildcard contains, or omit for exact match.

cURL
curl -X POST "http://localhost:3000/api/admin/sessions/<SESSION_ID>/auto-replies" \
  -H "Authorization: Bearer <ADMIN_JWT_TOKEN>" \
  -H "Content-Type: application/json" \
  -d '{
    "keyword": "*bantuan*",
    "reply_text": "Halo! Silakan ketik 1 untuk Pembayaran, 2 untuk CS."
  }'
DELETE /api/admin/auto-replies/:replyId Role: admin

Menghapus aturan balas otomatis berdasarkan ID-nya. Deletes an auto-reply rule by its numeric primary key.

cURL
curl -X DELETE "http://localhost:3000/api/admin/auto-replies/1" \
  -H "Authorization: Bearer <ADMIN_JWT_TOKEN>"

Skema Entitas Database SQLite SQLite Database Schemas

Tabel: users

KolomTipeDeskripsi
idINTEGER PK AUTOID unik pengguna.
usernameTEXT UNIQUEUsername akun.
password_hashTEXTBcrypt hash (cost 10).
roleTEXT'admin' atau 'user'.
max_sessionsINTEGERLimit kuota sesi WhatsApp yang diizinkan (default: 2).
statusTEXT'active' atau 'suspended'.
expires_atDATETIMETanggal kedaluwarsa akun (ISO string atau NULL).
created_atDATETIMEWaktu pembuatan akun.

Tabel: sessions

KolomTipeDeskripsi
idTEXT PKUUID v4 identifier sesi.
user_idINTEGER FKRelasi ke users.id pemilik sesi.
nameTEXTLabel nama sesi.
api_tokenTEXT UNIQUEToken 64 hex karakter untuk endpoint gateway.
statusTEXT'created', 'connecting', 'qr', 'pairing', 'connected', 'disconnected'.
auto_reply_enabledINTEGER1 aktif, 0 nonaktif.
watermark_enabledINTEGER1 aktif, 0 nonaktif.
auto_delete_enabledINTEGER1 aktif, 0 nonaktif (deleteForMe).
auto_delete_delayINTEGERDelay auto-delete dalam detik (default 30).
webhook_urlTEXTPrimary webhook URL.
webhook_chain_urlsTEXTJSON array string daftar URL sekunder.

Kode Error Khusus Admin Admin Specific Error Codes

KodePesan ErrorSolusi / Keterangan
400You cannot suspend your own admin account.Admin tidak diizinkan men-suspend akunnya sendiri demi mencegah lockout.
400You cannot delete your own administrative account.Admin tidak dapat menghapus akunnya sendiri.
400Username "xxx" is already taken.Gunakan username lain yang belum terdaftar di database.
403Forbidden: Superadministrator privileges required.Token JWT yang dikirim tidak memiliki role admin.
404User not found.ID user pada URL parameter tidak ditemukan di SQLite.