{"components":{"schemas":{"Error":{"properties":{"code":{"description":"Kode error stabil untuk ditangani program (lihat daftar kode error di dokumentasi).","example":"TOKEN_INVALID","type":"string"},"reason":{"example":"token invalid","type":"string"},"request_id":{"example":"req-1a2b3c","type":"string"},"status":{"example":false,"type":"boolean"}},"type":"object"},"SendRequest":{"properties":{"delay":{"description":"Tunda pengiriman sekian detik dari sekarang (alternatif schedule).","example":600,"type":"integer"},"latitude":{"example":-6.914744,"type":"number"},"longitude":{"description":"Koordinat titik lokasi (keduanya wajib bila memakai lokasi).","example":107.60981,"type":"number"},"message":{"description":"Isi teks / caption media. Kata 'OTP' memicu jalur prioritas.","example":"Halo, tagihan Anda sudah terbit.","type":"string"},"schedule":{"description":"Unix timestamp (detik) waktu pengiriman terjadwal.","example":1762347600,"type":"integer"},"target":{"description":"Satu atau banyak penerima dipisah koma. Nomor format lokal (08xx) atau internasional (62xx); ID grup berakhiran @g.us.","example":"081234567890,6281298765432,120363023456789012@g.us","type":"string"},"url":{"description":"URL publik gambar/video/dokumen (butuh paket berkmedia).","format":"uri","type":"string"}},"required":["target"],"type":"object"}},"securitySchemes":{"bearerAuth":{"description":"Token device (untuk endpoint device) atau token akun (khusus /get-devices). Nilai token juga diterima tanpa prefiks 'Bearer'.","scheme":"bearer","type":"http"}}},"info":{"contact":{"name":"WA Gateway — Pandora Group","url":"https://wa.pgtm.biz.id/docs"},"description":"API gateway WhatsApp mandiri (self-hosted): kirim pesan single/broadcast/terjadwal, media, lokasi, validasi nomor, daftar grup, status pesan, webhook pesan masuk, dan autoreply. Semua respons JSON memakai envelope {status, ...} dan header X-Request-Id.","title":"WA Gateway API","version":"2.1.0"},"openapi":"3.0.3","paths":{"/device":{"get":{"operationId":"deviceProfile","responses":{"200":{"content":{"application/json":{"example":{"device":{"connected":true,"name":"Nomor Toko","number":"6281234567890"},"expired":"2026-12-05T00:00:00.000Z","package":"regular","quota":{"limit":10000,"used":120},"request_id":"req-1a2b3c","status":true}}},"description":"Profil device + paket & kuota"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Token tidak valid"}},"summary":"Profil & status device pemilik token","tags":["Device"]}},"/fetch-groups":{"get":{"operationId":"fetchGroupsGet","responses":{"200":{"description":"Sama seperti POST /fetch-groups"}},"summary":"Daftar grup WhatsApp device (GET)","tags":["Device"]},"post":{"operationId":"fetchGroups","responses":{"200":{"content":{"application/json":{"example":{"detail":"ok","groups":[{"id":"120363023456789012@g.us","name":"Pelanggan Toko"}],"request_id":"req-1a2b3c","status":true}}},"description":"Daftar grup (id @g.us + nama)"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Token tidak valid"}},"summary":"Daftar grup WhatsApp device","tags":["Device"]}},"/get-devices":{"get":{"operationId":"getDevices","responses":{"200":{"content":{"application/json":{"example":{"account":{"email":"budi@toko.id","name":"Budi","package":"pro","quotaLimit":25000,"quotaUsed":340},"devices":[{"connected":true,"id":"dev-7c1e2a","name":"Nomor Toko","number":"6281234567890"}],"request_id":"req-1a2b3c","status":true}}},"description":"Profil akun + daftar device"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Token akun tidak valid"}},"summary":"Semua device milik akun (token akun)","tags":["Account"]}},"/health":{"get":{"operationId":"health","responses":{"200":{"content":{"application/json":{"example":{"devices":3,"online":2,"queue":0,"service":"wa-gateway","status":true}}},"description":"Ringkasan layanan"}},"security":[],"summary":"Status layanan (tanpa autentikasi)","tags":["System"]}},"/message/{id}":{"get":{"operationId":"messageStatus","parameters":[{"example":"msg-9f2ac41bd207","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"example":{"data":{"id":"msg-9f2ac41bd207","state":"sent","to":"6281234567890","wa_id":"3EB0A1B2C3"},"request_id":"req-1a2b3c","status":true}}},"description":"state: queued | scheduled | sent | failed | not_found"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Token tidak valid"}},"summary":"Status satu pesan","tags":["Messaging"]}},"/send":{"post":{"operationId":"sendMessage","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SendRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"example":{"accepted":2,"detail":"queued","id":["msg-9f2ac41bd207"],"rejected":0,"request_id":"req-1a2b3c","status":true}}},"description":"Pesan diterima antrean"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Validasi gagal"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Token tidak valid"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Paket nonaktif / kuota habis / media tidak termasuk paket"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Rate limit 60 req/menit per token"}},"summary":"Kirim pesan (single, broadcast, terjadwal)","tags":["Messaging"]}},"/validate":{"post":{"operationId":"validateNumbers","requestBody":{"content":{"application/json":{"example":{"target":"081234567890,081298765432"}}},"required":true},"responses":{"200":{"content":{"application/json":{"example":{"detail":"ok","request_id":"req-1a2b3c","result":[{"registered":true,"target":"081234567890"}],"status":true}}},"description":"Hasil validasi (atau DEVICE_OFFLINE bila device belum terhubung)"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Token tidak valid"}},"summary":"Cek nomor terdaftar di WhatsApp","tags":["Messaging"]}}},"security":[{"bearerAuth":[]}],"servers":[{"description":"Production","url":"https://wa.pgtm.biz.id"}],"tags":[{"description":"Kirim & lacak pesan","name":"Messaging"},{"description":"Profil & grup device","name":"Device"},{"description":"API tingkat akun","name":"Account"},{"description":"Kesehatan layanan","name":"System"}]}