D
API Reference

Session API

Endpoint session — POST /api/new (buat sesi), GET /api/qrcode (ambil QR), GET /api/logout (hapus sesi, GET bukan DELETE), GET /api/device-info (status device).

Endpoint session mengelola siklus hidup sesi WhatsApp — buat, ambil QR, logout, cek status.

POSThttp://localhost:5002/api/api/new
curl --request POST \
  --url http://localhost:5002/api/api/new

POST /api/new — Inisialisasi sesi baru

Handler: SessionController.create (src/controller/SessionController.ts:11)

Inisialisasi socket Baileys untuk instance. Membuat folder session/auth/<instance>/ dan mulai proses login. QR dikirim lewat Socket.IO event qrcode.

Request

FieldWajibTipeCatatan
instance✅stringUUID sesi — dipakai sebagai nama folder, key Map, room Socket.IO, kolom id device
json
{ "instance": "0c1a968c-7918-4c29-a524-0ad7c445ee7f" }

Response

json
{
  "success": true,
  "message": "Sesi berhasil diinisialisasi. Silahkan cek QR Code",
  "data": { "instance": "0c1a968c-..." }
}

Jika sesi sudah CONNECTED, socket lama dipakai kembali (tidak buat baru).

Error

StatusKondisiPesan
400instance kosong“Instance ID (nama sesi) wajib diisi.”
500Gagal start sessionGagal membuat sesi: ...

GET /api/qrcode — Ambil QR (base64)

Handler: SessionController.getQR (src/controller/SessionController.ts:34)

Request

Query parameter:

FieldWajibTipe
instance✅string
plaintext
GET /api/qrcode?instance=0c1a968c-...

Response berdasarkan kondisi sesi

KondisiHTTPdata
Sesi belum ada200Sesi otomatis di-start, qrcode: null
Sudah CONNECTED200{ "qrcode": null, "status": "CONNECTED" }
QR_READY200{ "qrcode": "data:image/png;base64,...", "status": "QR_READY" }
Masih proses (CONNECTING)202{ "qrcode": null, "status": "CONNECTING" }

Contoh response (QR_READY)

json
{
  "success": true,
  "message": "Silahkan scan QR code ini.",
  "data": {
    "qrcode": "data:image/png;base64,iVBORw0KGgo...",
    "status": "QR_READY"
  }
}

GET /api/logout — Logout & hapus sesi

Handler: SessionController.logout (src/controller/SessionController.ts:72)

Request

Query parameter:

FieldWajibTipe
instance✅string
plaintext
GET /api/logout?instance=0c1a968c-...

Response

json
{
  "success": true,
  "message": "Berhasil logout dan menghpaus sesi",
  "data": {}
}

Aksi

  1. session.sock.ev.removeAllListeners('creds.update') — matikan listener
  2. await session.sock.logout() — logout dari WhatsApp
  3. session.sock.end(undefined) — tutup socket
  4. this.sessions.delete(instanceId) — hapus dari Map
  5. fs.rmSync(authPath, { recursive: true, force: true }) — hapus folder kredensial

Setelah logout, device butuh scan QR ulang untuk reconnect.

GET /api/device-info — Status device

Handler: SessionController.status (src/controller/SessionController.ts:93)

Request

Query parameter:

FieldWajibTipe
instance✅string
plaintext
GET /api/device-info?instance=0c1a968c-...

Response (CONNECTED)

json
{
  "success": true,
  "message": "Info device berhasil di retrieve",
  "data": {
    "id": "0c1a968c-...",
    "status": "open",
    "isConnected": true,
    "isActivated": true,
    "message": "Device Terhubung",
    "user": {
      "name": "Nama Profil WA",
      "id": "628123456789"
    }
  }
}

Response (NOT_FOUND)

json
{
  "success": true,
  "message": "Info device berhasil di retrieve",
  "data": {
    "id": "0c1a968c-...",
    "status": "NOT_FOUND",
    "isConnected": false,
    "isActivated": false,
    "message": "Sesi tidak ditemukan."
  }
}

Status normalisasi

Status internalAPI status
CONNECTED"open"
CONNECTING / QR_READY / DISCONNECTED"close"
Sesi tidak ada di Map"NOT_FOUND"

Catatan

  • Tidak ada endpoint untuk list semua sesi — hanya cek per-instance
  • device-info return success: true bahkan untuk NOT_FOUND — bukan error, hanya status
  • GET /api/logout adalah operasi destruktif via GET — non-RESTful, tapi sudah live
  • Sesi disimpan in-memory — restart akan muat ulang semua sesi dari session/auth/

Langkah berikutnya