{"openapi":"3.1.0","info":{"title":"JasaOnline WhatsApp Unofficial Gateway API","version":"1.0.0","description":"REST API untuk mengirim & menerima pesan WhatsApp dari sistem Anda sendiri."},"servers":[{"url":"https://wau.jasaonline.net"}],"security":[{"ApiKeyAuth":[]}],"components":{"securitySchemes":{"ApiKeyAuth":{"type":"apiKey","in":"header","name":"X-API-Key"}}},"paths":{"/v1/devices":{"post":{"operationId":"device-create","summary":"Buat device","description":"Membuat slot device baru berstatus NEW. Belum ada nomor sampai pairing selesai.","security":[{"ApiKeyAuth":[]}],"parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","example":{"label":"Nomor CS 1"}}}}},"responses":{"201":{"description":"Device dibuat","content":{"application/json":{"schema":{"type":"object","example":{"id":"3fa85f64-5717-4562-b3fc-2c963f66afa6","label":"Nomor CS 1","status":"ACTIVE","wa_jid":"6281234567890@s.whatsapp.net","phone_number":"6281234567890","status_reason":null,"daily_cap":500,"last_connected_at":"2026-08-29T09:14:22Z","paired_at":"2026-08-29T09:14:22Z","created_at":"2026-08-29T09:10:02Z"}}}}},"400":{"description":"label kosong","content":{"application/json":{"schema":{"type":"object","example":{"error":"label required"}}}}}},"tags":["Perangkat"]},"get":{"operationId":"device-list","summary":"Daftar device","security":[{"ApiKeyAuth":[]}],"parameters":[],"responses":{"200":{"description":"Daftar device tenant","content":{"application/json":{"schema":{"type":"array","example":[{"id":"3fa85f64-5717-4562-b3fc-2c963f66afa6","label":"Nomor CS 1","status":"ACTIVE","wa_jid":"6281234567890@s.whatsapp.net","phone_number":"6281234567890","status_reason":null,"daily_cap":500,"last_connected_at":"2026-08-29T09:14:22Z","paired_at":"2026-08-29T09:14:22Z","created_at":"2026-08-29T09:10:02Z"}]}}}}},"tags":["Perangkat"]}},"/v1/devices/{id}":{"get":{"operationId":"device-get","summary":"Detail & status device","description":"Tidak ada endpoint status terpisah — status pairing dibaca dari sini.","security":[{"ApiKeyAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","example":"3fa85f64-5717-4562-b3fc-2c963f66afa6"}}],"responses":{"200":{"description":"Device","content":{"application/json":{"schema":{"type":"object","example":{"id":"3fa85f64-5717-4562-b3fc-2c963f66afa6","label":"Nomor CS 1","status":"ACTIVE","wa_jid":"6281234567890@s.whatsapp.net","phone_number":"6281234567890","status_reason":null,"daily_cap":500,"last_connected_at":"2026-08-29T09:14:22Z","paired_at":"2026-08-29T09:14:22Z","created_at":"2026-08-29T09:10:02Z"}}}}},"404":{"description":"Bukan milik tenant ini","content":{"application/json":{"schema":{"type":"object","example":{"error":"device_not_found"}}}}}},"tags":["Perangkat"]},"delete":{"operationId":"device-delete","summary":"Hapus device","security":[{"ApiKeyAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"204":{"description":"Terhapus"}},"tags":["Perangkat"]}},"/v1/devices/{id}/pair":{"post":{"operationId":"device-pair","summary":"Mulai pairing","description":"Membuka sesi pairing; QR-nya diambil lewat /pair/qr atau /pair/qr.png dan berotasi ~20 detik.","security":[{"ApiKeyAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"202":{"description":"Sesi pairing dibuka","content":{"application/json":{"schema":{"type":"object","example":{"device_id":"3fa85f64-5717-4562-b3fc-2c963f66afa6","status":"PAIRING","stream":"/v1/devices/3fa85f64-5717-4562-b3fc-2c963f66afa6/pair/stream"}}}}},"500":{"description":"Gagal membuka sesi","content":{"application/json":{"schema":{"type":"object","example":{"error":"pairing_failed"}}}}}},"tags":["Perangkat"]}},"/v1/devices/{id}/pair/qr":{"get":{"operationId":"device-qr","summary":"Kode QR (teks)","security":[{"ApiKeyAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Kode QR mentah","content":{"application/json":{"schema":{"type":"object","example":{"code":"2@abc…","state":"PAIRING"}}}}},"404":{"description":"Tidak ada sesi pairing aktif","content":{"application/json":{"schema":{"type":"object","example":{"error":"no_active_pairing"}}}}}},"tags":["Perangkat"]}},"/v1/devices/{id}/pair/qr.png":{"get":{"operationId":"device-qr-png","summary":"Kode QR (PNG)","security":[{"ApiKeyAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Gambar QR"},"409":{"description":"QR belum siap","content":{"application/json":{"schema":{"type":"object","example":{"error":"no_qr","state":"PAIRING"}}}}}},"tags":["Perangkat"]}},"/v1/devices/{id}/pair/stream":{"get":{"operationId":"device-stream","summary":"Aliran status pairing (SSE)","security":[{"ApiKeyAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Aliran event pairing"}},"tags":["Perangkat"]}},"/v1/devices/{id}/presence":{"put":{"operationId":"device-presence","summary":"Set presence device","security":[{"ApiKeyAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","example":{"state":"available"}}}}},"responses":{"200":{"description":"Presence diset","content":{"application/json":{"schema":{"type":"object","example":{"presence":"available"}}}}},"409":{"description":"Device belum siap","content":{"application/json":{"schema":{"type":"object","example":{"error":"device_not_ready"}}}}}},"tags":["Perangkat"]}},"/v1/messages":{"post":{"operationId":"message-send","summary":"Kirim pesan","description":"to boleh digit polos (otomatis ditambah @s.whatsapp.net) atau JID grup …@g.us. device_id opsional: dikosongkan = gateway memilih device sendiri (round-robin + sticky per percakapan).","security":[{"ApiKeyAuth":[]}],"parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","example":{"to":"6281234567890","type":"text","text":"Halo dari gateway"}}}}},"responses":{"202":{"description":"Masuk antrean","content":{"application/json":{"schema":{"type":"object","example":{"message_id":"9f1c…","wa_message_id":"3EB0…","status":"queued","client_message_id":"pesanan-1023","device_id":"3fa85f64-5717-4562-b3fc-2c963f66afa6"}}}}},"400":{"description":"to / type kosong","content":{"application/json":{"schema":{"type":"object","example":{"error":"to and type required"}}}}},"409":{"description":"Device dipaksa tapi belum ACTIVE","content":{"application/json":{"schema":{"type":"object","example":{"error":"device_not_active"}}}}},"503":{"description":"Tidak ada device aktif di bawah batas harian","content":{"application/json":{"schema":{"type":"object","example":{"error":"no_eligible_device"}}}}}},"tags":["Pesan"]}},"/v1/media":{"post":{"operationId":"media-upload","summary":"Unggah media (opsional: langsung kirim)","description":"Dua bentuk masukan: multipart/form-data dengan field `file`, atau JSON { url } yang diunduh sendiri oleh gateway. Dua perilaku: TANPA `to` berkasnya hanya disimpan (201 + media_id); DENGAN `to` berkasnya disimpan lalu pesannya diantre (202 + media_id DAN message_id). `type` boleh dikosongkan — ditebak dari mime berkas (image/video/audio, selain itu document). caption hanya dipasang untuk image, video, dan document.","security":[{"ApiKeyAuth":[]}],"parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","example":{"url":"https://contoh.com/foto.jpg","to":"6281234567890","caption":"Struk pesanan #1023","type":"image","device_id":null,"ptt":false}}}}},"responses":{"201":{"description":"Tersimpan (tanpa `to`)","content":{"application/json":{"schema":{"type":"object","example":{"media_id":"0d2c…","mime_type":"image/jpeg","size_bytes":12345,"deduped":false}}}}},"202":{"description":"Tersimpan dan pesannya diantre (dengan `to`)","content":{"application/json":{"schema":{"type":"object","example":{"media_id":"0d2c…","mime_type":"image/jpeg","size_bytes":12345,"message_id":"9f1c…","wa_message_id":"3EB0…","status":"queued","device_id":"3fa85f64-5717-4562-b3fc-2c963f66afa6","type":"image","deduped":false}}}}},"400":{"description":"URL tidak valid / body kosong","content":{"application/json":{"schema":{"type":"object","example":{"error":"invalid url"}}}}},"409":{"description":"Berkas tersimpan, tapi device yang dipaksa belum ACTIVE","content":{"application/json":{"schema":{"type":"object","example":{"media_id":"0d2c…","mime_type":"image/jpeg","size_bytes":12345,"error":"device_not_active"}}}}}},"tags":["Media"]}},"/v1/media/{id}":{"get":{"operationId":"media-get","summary":"Unduh media","security":[{"ApiKeyAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Isi berkas"},"404":{"description":"Tidak ada","content":{"application/json":{"schema":{"type":"object","example":{"error":"media_not_found"}}}}}},"tags":["Media"]}},"/v1/webhooks":{"post":{"operationId":"webhook-create","summary":"Daftarkan endpoint","description":"secret hanya dikembalikan SEKALI di balasan ini.","security":[{"ApiKeyAuth":[]}],"parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","example":{"url":"https://server-anda.com/webhook","events":["message.received","message.status"]}}}}},"responses":{"201":{"description":"Terdaftar (berisi secret)","content":{"application/json":{"schema":{"type":"object","example":{"id":"8b1f0e2c-1a44-4f0b-9a6d-2b7a51c0d3e9","url":"https://server-anda.com/webhook","events":["message.received","message.status"],"secret":"whsec_…","is_active":true,"breaker_state":"closed","created_at":"2026-08-29T09:20:11Z"}}}}},"400":{"description":"url kosong","content":{"application/json":{"schema":{"type":"object","example":{"error":"url required"}}}}}},"tags":["Webhook"]},"get":{"operationId":"webhook-list","summary":"Daftar endpoint","security":[{"ApiKeyAuth":[]}],"parameters":[],"responses":{"200":{"description":"Daftar","content":{"application/json":{"schema":{"type":"array","example":[{"id":"8b1f0e2c-1a44-4f0b-9a6d-2b7a51c0d3e9","url":"https://server-anda.com/webhook","events":["message.received","message.status"],"is_active":true,"breaker_state":"closed","created_at":"2026-08-29T09:20:11Z"}]}}}}},"tags":["Webhook"]}},"/v1/webhooks/{id}":{"get":{"operationId":"webhook-get","summary":"Detail endpoint","security":[{"ApiKeyAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Endpoint","content":{"application/json":{"schema":{"type":"object","example":{"id":"8b1f0e2c-1a44-4f0b-9a6d-2b7a51c0d3e9","url":"https://server-anda.com/webhook","events":["message.received","message.status"],"is_active":true,"breaker_state":"closed","created_at":"2026-08-29T09:20:11Z"}}}}},"404":{"description":"Tidak ada","content":{"application/json":{"schema":{"type":"object","example":{"error":"webhook_not_found"}}}}}},"tags":["Webhook"]},"patch":{"operationId":"webhook-update","summary":"Ubah endpoint","security":[{"ApiKeyAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","example":{"is_active":false}}}}},"responses":{"200":{"description":"Endpoint setelah diubah","content":{"application/json":{"schema":{"type":"object","example":{"id":"8b1f0e2c-1a44-4f0b-9a6d-2b7a51c0d3e9","url":"https://server-anda.com/webhook","events":["message.received","message.status"],"is_active":true,"breaker_state":"closed","created_at":"2026-08-29T09:20:11Z"}}}}}},"tags":["Webhook"]},"delete":{"operationId":"webhook-delete","summary":"Hapus endpoint","security":[{"ApiKeyAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"204":{"description":"Terhapus"}},"tags":["Webhook"]}},"/v1/webhooks/{id}/rotate-secret":{"post":{"operationId":"webhook-rotate","summary":"Rotasi secret","description":"Secret lama langsung tidak berlaku. Balasan ini satu-satunya tempat secret baru terlihat.","security":[{"ApiKeyAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Secret baru","content":{"application/json":{"schema":{"type":"object","example":{"secret":"whsec_…"}}}}}},"tags":["Webhook"]}},"/v1/webhooks/{id}/test":{"post":{"operationId":"webhook-test","summary":"Kirim event uji","security":[{"ApiKeyAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"202":{"description":"Diantre","content":{"application/json":{"schema":{"type":"object","example":{"status":"queued"}}}}}},"tags":["Webhook"]}},"/v1/webhooks/{id}/deliveries":{"get":{"operationId":"webhook-deliveries","summary":"Riwayat kiriman","description":"50 kiriman terakhir, berisi payload yang dikirim dan potongan balasan endpoint.","security":[{"ApiKeyAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Riwayat","content":{"application/json":{"schema":{"type":"array","example":[{"id":"c1a2…","event_id":"7e6f…","event_type":"message.received","status":"delivered","attempt_count":1,"last_status_code":200,"last_error":null,"next_retry_at":"2026-08-29T09:31:00Z","delivered_at":"2026-08-29T09:30:59Z","created_at":"2026-08-29T09:30:58Z","payload":{"event":"message.received","data":{"…":"…"}},"last_response_body":"ok"}]}}}}},"tags":["Webhook"]}},"/v1/webhooks/{id}/deliveries/{deliveryId}/redeliver":{"post":{"operationId":"webhook-redeliver","summary":"Kirim ulang satu kiriman","description":"Membuat kiriman BARU dengan event_id yang sama. Boleh untuk status apa pun, termasuk yang sudah delivered.","security":[{"ApiKeyAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"deliveryId","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"202":{"description":"Diantre","content":{"application/json":{"schema":{"type":"object","example":{"status":"queued","delivery_id":"f0a1…"}}}}},"404":{"description":"Kiriman tidak ada","content":{"application/json":{"schema":{"type":"object","example":{"error":"delivery_not_found"}}}}}},"tags":["Webhook"]}},"/v1/groups/join":{"post":{"operationId":"group-join","summary":"Gabung lewat kode undangan","security":[{"ApiKeyAuth":[]}],"parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","example":{"code":"AbCdEfGhIjK"}}}}},"responses":{"200":{"description":"Bergabung"}},"tags":["Grup"]}},"/v1/groups/{jid}":{"get":{"operationId":"group-info","summary":"Info grup","security":[{"ApiKeyAuth":[]}],"parameters":[{"name":"jid","in":"path","required":true,"schema":{"type":"string","example":"1203630…@g.us"}}],"responses":{"200":{"description":"Metadata grup"}},"tags":["Grup"]},"patch":{"operationId":"group-patch","summary":"Ubah nama / topik","security":[{"ApiKeyAuth":[]}],"parameters":[{"name":"jid","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","example":{"name":"Tim Support","topic":"Kanal internal"}}}}},"responses":{"200":{"description":"Tersimpan"}},"tags":["Grup"]}},"/v1/groups/{jid}/participants":{"post":{"operationId":"group-participants","summary":"Tambah / keluarkan / promosikan anggota","security":[{"ApiKeyAuth":[]}],"parameters":[{"name":"jid","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","example":{"action":"add","jids":["6281234567890@s.whatsapp.net"]}}}}},"responses":{"200":{"description":"Hasil per JID"}},"tags":["Grup"]}},"/v1/groups/{jid}/photo":{"put":{"operationId":"group-photo","summary":"Ganti foto grup","security":[{"ApiKeyAuth":[]}],"parameters":[{"name":"jid","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","example":{"media_id":"0d2c…"}}}}},"responses":{"200":{"description":"Tersimpan"}},"tags":["Grup"]}},"/v1/groups/{jid}/settings":{"patch":{"operationId":"group-settings","summary":"Ubah pengaturan grup","security":[{"ApiKeyAuth":[]}],"parameters":[{"name":"jid","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","example":{"announce":false,"locked":false,"join_approval":false,"member_add_mode":"admin"}}}}},"responses":{"200":{"description":"Tersimpan"}},"tags":["Grup"]}},"/v1/groups/{jid}/invite-link":{"get":{"operationId":"group-invite","summary":"Ambil tautan undangan","security":[{"ApiKeyAuth":[]}],"parameters":[{"name":"jid","in":"path","required":true,"schema":{"type":"string"}},{"name":"reset","in":"query","required":false,"description":"true = cabut tautan lama dan buat baru","schema":{"type":"string","example":"false"}}],"responses":{"200":{"description":"Tautan undangan"}},"tags":["Grup"]}},"/v1/groups/{jid}/leave":{"post":{"operationId":"group-leave","summary":"Keluar dari grup","security":[{"ApiKeyAuth":[]}],"parameters":[{"name":"jid","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Keluar"}},"tags":["Grup"]}},"/v1/chats":{"get":{"operationId":"chat-list","summary":"Daftar percakapan","description":"Daftar percakapan terakhir berdasarkan pesan terbaru. Setiap baris berisi metadata lawan bicara, pesan terakhir, jumlah unread, dan device yang menjadi via.","security":[{"ApiKeyAuth":[]}],"parameters":[{"name":"limit","in":"query","required":false,"description":"Maksimal jumlah chat. Default 100, maks 500.","schema":{"type":"string","example":"100"}}],"responses":{"200":{"description":"Daftar percakapan","content":{"application/json":{"schema":{"type":"array","example":[{"chat_jid":"6281234567890@s.whatsapp.net","is_group":false,"name":"Bu Ratna","phone":"6281234567890","via_device_id":"3fa85f64-5717-4562-b3fc-2c963f66afa6","via_phone":"6281234567890","unread":2,"last_message":{"direction":"inbound","type":"text","body":"Halo, pesanan sudah dikirim?","status":"delivered","created_at":"2026-08-29T09:30:00Z"}}]}}}}},"tags":["Chat"]}},"/v1/chats/{jid}/mute":{"post":{"operationId":"chat-mute","summary":"Bisukan chat","security":[{"ApiKeyAuth":[]}],"parameters":[{"name":"jid","in":"path","required":true,"schema":{"type":"string","example":"6281234567890@s.whatsapp.net"}}],"responses":{"200":{"description":"Dibisukan"}},"tags":["Chat"]},"delete":{"operationId":"chat-unmute","summary":"Batalkan bisu","security":[{"ApiKeyAuth":[]}],"parameters":[{"name":"jid","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Tidak lagi dibisukan"}},"tags":["Chat"]}},"/v1/chats/{jid}/archive":{"post":{"operationId":"chat-archive","summary":"Arsipkan / keluarkan dari arsip","security":[{"ApiKeyAuth":[]}],"parameters":[{"name":"jid","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","example":{"archive":true}}}}},"responses":{"200":{"description":"Tersimpan"}},"tags":["Chat"]}},"/v1/chats/{jid}/read":{"post":{"operationId":"chat-read","summary":"Tandai pesan terbaca","security":[{"ApiKeyAuth":[]}],"parameters":[{"name":"jid","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","example":{"message_ids":["3EB0…"]}}}}},"responses":{"200":{"description":"Ditandai"}},"tags":["Chat"]}},"/v1/chats/{jid}/disappearing":{"put":{"operationId":"chat-disappearing","summary":"Pesan menghilang","security":[{"ApiKeyAuth":[]}],"parameters":[{"name":"jid","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","example":{"seconds":604800}}}}},"responses":{"200":{"description":"Tersimpan"}},"tags":["Chat"]}},"/v1/chats/{jid}/typing":{"post":{"operationId":"chat-typing","summary":"Indikator mengetik","security":[{"ApiKeyAuth":[]}],"parameters":[{"name":"jid","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","example":{"state":"composing"}}}}},"responses":{"200":{"description":"Terkirim"}},"tags":["Chat"]}},"/v1/chats/{jid}/messages":{"get":{"operationId":"chat-history","summary":"Riwayat pesan","security":[{"ApiKeyAuth":[]}],"parameters":[{"name":"jid","in":"path","required":true,"schema":{"type":"string","example":"6281234567890@s.whatsapp.net"}},{"name":"limit","in":"query","required":false,"description":"Jumlah pesan. Default 50, maks 200.","schema":{"type":"string","example":"50"}},{"name":"before","in":"query","required":false,"description":"Ambil pesan sebelum timestamp RFC3339 ini (pagination ke belakang).","schema":{"type":"string","example":"2026-08-29T09:30:00Z"}}],"responses":{"200":{"description":"Daftar pesan tersimpan"}},"tags":["Chat"]}},"/v1/messages/{id}/star":{"post":{"operationId":"message-star","summary":"Bintangi pesan","security":[{"ApiKeyAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","example":{"starred":true}}}}},"responses":{"200":{"description":"Tersimpan"}},"tags":["Chat"]}},"/v1/contacts/check":{"get":{"operationId":"contact-check","summary":"Cek nomor terdaftar di WhatsApp","security":[{"ApiKeyAuth":[]}],"parameters":[{"name":"phones","in":"query","required":true,"description":"Dipisah koma.","schema":{"type":"string","example":"6281234567890,6289876543210"}},{"name":"device_id","in":"query","required":false,"description":"Paksa device tertentu.","schema":{"type":"string"}}],"responses":{"200":{"description":"Hasil per nomor"}},"tags":["Kontak"]}},"/v1/contacts/{jid}/block":{"post":{"operationId":"contact-block","summary":"Blokir kontak","security":[{"ApiKeyAuth":[]}],"parameters":[{"name":"jid","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Diblokir"}},"tags":["Kontak"]},"delete":{"operationId":"contact-unblock","summary":"Buka blokir","security":[{"ApiKeyAuth":[]}],"parameters":[{"name":"jid","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Tidak lagi diblokir"}},"tags":["Kontak"]}},"/v1/contacts/{jid}":{"get":{"operationId":"contact-info","summary":"Info kontak","security":[{"ApiKeyAuth":[]}],"parameters":[{"name":"jid","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Profil kontak"}},"tags":["Kontak"]}},"/v1/contacts/{jid}/avatar":{"get":{"operationId":"contact-avatar","summary":"Foto profil","security":[{"ApiKeyAuth":[]}],"parameters":[{"name":"jid","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"URL / berkas foto"}},"tags":["Kontak"]}},"/v1/contacts/{jid}/presence":{"get":{"operationId":"contact-presence","summary":"Presence kontak","security":[{"ApiKeyAuth":[]}],"parameters":[{"name":"jid","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Status kehadiran"}},"tags":["Kontak"]}},"/v1/contacts/{jid}/business":{"get":{"operationId":"contact-business","summary":"Profil bisnis","security":[{"ApiKeyAuth":[]}],"parameters":[{"name":"jid","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Profil bisnis kontak"}},"tags":["Kontak"]}},"/v1/audit":{"get":{"operationId":"audit-list","summary":"Daftar jejak audit","security":[{"ApiKeyAuth":[]}],"parameters":[{"name":"action","in":"query","required":false,"description":"Filter nama aksi.","schema":{"type":"string","example":"message.send"}},{"name":"resource_type","in":"query","required":false,"description":"Filter tipe resource.","schema":{"type":"string","example":"message"}},{"name":"actor_id","in":"query","required":false,"description":"Filter ID aktor (API key).","schema":{"type":"string","example":"3fa85f64-5717-4562-b3fc-2c963f66afa6"}},{"name":"from","in":"query","required":false,"description":"Batas awal occurred_at (RFC3339).","schema":{"type":"string","example":"2026-08-29T00:00:00Z"}},{"name":"to","in":"query","required":false,"description":"Batas akhir occurred_at (RFC3339).","schema":{"type":"string","example":"2026-08-29T23:59:59Z"}}],"responses":{"200":{"description":"Entri audit","content":{"application/json":{"schema":{"type":"array","example":[{"id":"aa11…","occurred_at":"2026-08-29T09:30:00Z","actor_type":"api_key","actor_id":"3fa85f64-5717-4562-b3fc-2c963f66afa6","actor_ip":"203.0.113.10","action":"message.send","resource_type":"message","resource_id":"9f1c…","outcome":"ok","detail":{"to":"6281234567890@s.whatsapp.net","type":"text"},"seq":42,"sealed":true}]}}}}},"tags":["Audit & utilitas"]}},"/v1/audit/verify":{"get":{"operationId":"audit-verify","summary":"Verifikasi rantai audit","security":[{"ApiKeyAuth":[]}],"parameters":[],"responses":{"200":{"description":"Hasil verifikasi rantai hash"}},"tags":["Audit & utilitas"]}},"/v1/audit/export":{"get":{"operationId":"audit-export","summary":"Ekspor jejak audit","security":[{"ApiKeyAuth":[]}],"parameters":[],"responses":{"200":{"description":"Berkas ekspor"}},"tags":["Audit & utilitas"]}},"/v1/ping":{"get":{"operationId":"ping","summary":"Uji API key","description":"Cara tercepat memastikan key Anda hidup dan tenant-nya benar.","security":[{"ApiKeyAuth":[]}],"parameters":[],"responses":{"200":{"description":"Pong","content":{"application/json":{"schema":{"type":"object","example":{"pong":"ok","tenant_id":"…"}}}}}},"tags":["Audit & utilitas"]}},"/v1/echo":{"post":{"operationId":"echo","summary":"Echo","security":[{"ApiKeyAuth":[]}],"parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","example":{"halo":"dunia"}}}}},"responses":{"200":{"description":"Waktu server + tenant","content":{"application/json":{"schema":{"type":"object","example":{"echoed_at":"2026-08-29T09:30:00Z","tenant_id":"…"}}}}}},"tags":["Audit & utilitas"]}},"/healthz":{"get":{"operationId":"healthz","summary":"Kesehatan gateway","parameters":[],"responses":{"200":{"description":"Sehat","content":{"application/json":{"schema":{"type":"object","example":{"status":"ok"}}}}}},"tags":["Audit & utilitas"]}}}}