PWAPWADocumentation
Quick startPanduanAPIContohErrors
Dokumentasi PWA

Mulai dari dashboard. Masuk ke API saat kamu membutuhkannya.

Panduan ini menjelaskan alur penggunaan workspace, device, pesan, automation, webhook, dan integrasi API tanpa mencampur semuanya dalam satu halaman yang sulit dibaca.

Quick start
  1. 01
    Buat akunDaftar dan masuk ke workspace
  2. 02
    Hubungkan deviceScan QR dari halaman Devices
  3. 03
    Kirim pesan pertamaDari dashboard atau API
  4. 04
    Tambahkan workflowAutomation atau webhook bila perlu
Catatan koneksi

Koneksi WhatsApp pada build ini bukan WhatsApp Cloud API resmi. Terapkan opt-in, hindari spam, dan gunakan layanan sesuai kebijakan platform.

Panduan dashboard

Alur utama penggunaan

Ikuti bagian ini kalau kamu baru pertama memakai workspace. Setiap panduan fokus pada satu pekerjaan.

01

Membuat workspace

Daftar, verifikasi email, lalu cek paket dan kuota aktif.

  1. 01Buka halaman Register dan isi nama, email, serta password minimal 8 karakter.
  2. 02Verifikasi email dari tautan yang dikirim gateway.
  3. 03Masuk ke Account untuk melihat limit device, pesan, automation, webhook, dan API key.
02

Menghubungkan WhatsApp

Buat device, tampilkan QR, lalu scan dari Linked devices.

  1. 01Masuk ke Devices dan pilih Add device.
  2. 02Gunakan nama yang mudah dikenali, misalnya Customer Service.
  3. 03Tekan Connect, buka WhatsApp → Linked devices → Link a device, lalu scan QR.
  4. 04Tunggu status Connected. Session terenkripsi disimpan agar reconnect tidak perlu QR baru.
03

Mengirim dan memantau pesan

Kirim dari dashboard atau API dan ikuti receipt hingga read.

  1. 01Buka Messages lalu pilih Send message.
  2. 02Pilih device yang Connected, isi nomor tujuan dalam format 628…, dan pilih tipe pesan.
  3. 03Untuk media dari dashboard, upload file langsung dari perangkat; tidak perlu URL publik.
  4. 04Pantau status queued, sent, delivered, read, played, atau failed dari riwayat pesan.
04

Membuat automation

Automation punya documentation center sendiri karena mencakup command, flow, session, media, capability, credential, plugin, dan GatewayScript.

Buka Automation Docs →
  1. 01Buka Automations lalu pilih Builder, Declarative Flow, atau Full GatewayScript sesuai kebutuhan.
  2. 02Atur Command & Prefix serta Auto Menu jika automation digunakan sebagai bot command.
  3. 03Gunakan Capability, Credential, Integration, media, dan session dari runtime yang sama.
  4. 04Gunakan Test Bench dan compiler sebelum Publish. Dokumentasi lengkap tersedia di Automation Docs.
05

Menerima event webhook

Daftarkan HTTPS endpoint, verifikasi signature, dan pantau delivery.

  1. 01Buka Webhooks dan masukkan URL HTTPS publik.
  2. 02Pilih event serta device yang boleh mengirim event.
  3. 03Simpan secret satu kali dan gunakan untuk memverifikasi HMAC signature.
  4. 04Gunakan Test, Retry, atau Replay dari riwayat delivery jika consumer gagal.
06

Menggunakan API key

Buat key permanen dengan scope minimum, simpan sekali, lalu kirim melalui header.

  1. 01Buka Developer → Create API key.
  2. 02Pilih key otomatis gratis atau custom API key berawalan pn3kn_; biaya custom mengikuti harga aktif yang ditetapkan admin.
  3. 03Tentukan label custom 1-40 karakter. Gateway menambahkan secret acak server-side setelah label agar bearer key tetap sulit ditebak.
  4. 04Atur scope minimum, rate limit, dan IP allowlist. API key tidak memiliki masa kedaluwarsa.
  5. 05Salin key dari modal hasil karena plaintext tidak disimpan.
  6. 06Kirim melalui X-API-Key dan simpan X-Request-Id dari setiap response. Rotasi otomatis gratis; mengganti nilai dengan custom key memakai harga custom yang sedang aktif.
API reference

99 operasi tersedia

Gunakan cookie session untuk dashboard dan X-API-Key untuk integrasi server-to-server.

Base URLhttps://pwa.ridped.com
AuthenticationX-API-Key: ng_live_... / pn3kn_...
Request tracingX-Request-Id

Authentication & account

14 endpoint
Public / Session / profile:read
POST/v1/auth/registerMembuat akun dan workspacePublic
POST/v1/auth/loginMembuat browser sessionPublic
POST/v1/auth/logoutMengakhiri session aktifSession
GET/v1/auth/meProfil dan entitlement penggunaSession / profile:read
GET/v1/auth/sessionsDaftar browser sessionSession
DELETE/v1/auth/sessions/{id}Mencabut satu sessionSession
POST/v1/auth/sessions/revoke-othersMencabut seluruh session lainSession
PATCH/v1/auth/profileMengubah profilSession
POST/v1/auth/email/resendKirim ulang verifikasiSession
POST/v1/auth/email/verifyVerifikasi token emailPublic
POST/v1/auth/password/forgotMinta reset passwordPublic
POST/v1/auth/password/resetReset password dengan tokenPublic
POST/v1/auth/password/changeGanti passwordSession
POST/v1/auth/email/change-requestMinta perubahan emailSession

Devices & media

10 endpoint
devices:* / messages:*
GET/v1/devicesDaftar devicedevices:read
POST/v1/devicesMembuat devicedevices:manage
PATCH/v1/devices/{deviceId}Mengubah devicedevices:manage
POST/v1/devices/{deviceId}/connectConnect dan membuat QRdevices:manage
POST/v1/devices/{deviceId}/reconnectReconnect session tersimpandevices:manage
POST/v1/devices/{deviceId}/logoutLogout WhatsAppdevices:manage
DELETE/v1/devices/{deviceId}Menghapus devicedevices:manage
GET/v1/mediaDaftar upload sementaramessages:read
POST/v1/mediaUpload binary mediamessages:send
DELETE/v1/media/{uploadId}Menghapus uploadmessages:send

Messages

7 endpoint
messages:read / messages:send
GET/v1/messages/typesKatalog tipe pesan dan contoh payloadPublic
GET/v1/messages/sendMengirim semua tipe via query parametermessages:send
GET/v1/messagesRiwayat dan filter pesanmessages:read
GET/v1/messages/statsStatistik deliverymessages:read
GET/v1/messages/{id}Detail pesan dan receiptmessages:read
POST/v1/messages/sendMengirim pesanmessages:send
POST/v1/messages/{id}/retryRetry pesan failedmessages:send

Automations

10 endpoint
automations:read / automations:manage
GET/v1/automationsDaftar automationautomations:read
POST/v1/automationsMembuat automationautomations:manage
GET/v1/automations/{id}/versionsRiwayat versiautomations:read
GET/v1/automations/{id}/executionsLog eksekusiautomations:read
POST/v1/automations/{id}/versionsMembuat draft versionautomations:manage
POST/v1/automations/{id}/publishPublish versionautomations:manage
PATCH/v1/automations/{id}Mengubah metadataautomations:manage
DELETE/v1/automations/{id}Menghapus automationautomations:manage
POST/v1/automations/script/validateValidasi statis GatewayScript dan capability manifestautomations:manage
POST/v1/automations/testDry-run dengan diagnostics dan execution traceautomations:manage

Webhooks & integrations

13 endpoint
webhooks:* / integrations:*
GET/v1/webhooksDaftar webhookwebhooks:read
POST/v1/webhooksMembuat webhookwebhooks:manage
GET/v1/webhooks/{id}/deliveriesRiwayat deliverywebhooks:read
PATCH/v1/webhooks/{id}Mengubah webhookwebhooks:manage
POST/v1/webhooks/{id}/rotate-secretRotasi secretSession
POST/v1/webhooks/{id}/testMengirim event testwebhooks:manage
POST/v1/webhooks/{id}/deliveries/{deliveryId}/retryRetry deliverywebhooks:manage
POST/v1/webhooks/{id}/deliveries/{deliveryId}/replayReplay deliverywebhooks:manage
DELETE/v1/webhooks/{id}Menghapus webhookwebhooks:manage
GET/v1/integrationsDaftar integration aliasintegrations:read
POST/v1/integrationsMembuat integrationintegrations:manage
PATCH/v1/integrations/{id}Mengubah integrationintegrations:manage
DELETE/v1/integrations/{id}Menghapus integrationintegrations:manage

Billing, developer & system

45 endpoint
Session / Admin
GET/healthHealth proses APIPublic
GET/v1/openapi.jsonSpesifikasi OpenAPI 3.1Public
GET/v1/billing/plansDaftar paketPublic
GET/v1/billing/accountUsage dan entitlementSession / profile:read
GET/v1/billing/change-requestsDaftar perubahan paketSession
POST/v1/billing/change-requestsAjukan perubahan paketSession
DELETE/v1/billing/change-requests/{id}Batalkan perubahan paketSession
GET/v1/billing/walletSaldo dan riwayat transaksi walletSession
GET/v1/billing/payment-channelsKanal transfer manualSession
POST/v1/billing/topupsAjukan top-upSession
DELETE/v1/billing/topups/{id}Batalkan top-upSession
POST/v1/billing/purchasesBeli paket dari saldoSession
GET/v1/api-keysDaftar API key permanenSession
POST/v1/api-keysMembuat API key permanenSession
POST/v1/api-keys/customMembeli custom API key dengan harga aktifSession
PATCH/v1/api-keys/{id}Mengubah nama, scope, IP, dan rate limitSession
DELETE/v1/api-keys/{id}Revoke API keySession
POST/v1/api-keys/{id}/rotateRotasi API key otomatisSession
POST/v1/api-keys/{id}/customizeMengganti nilai key dengan custom key berbayarSession
GET/v1/developer/capabilitiesScope dan limit tersediaSession
GET/v1/developer/requestsRequest traceSession
GET/v1/workspace/healthTenant-safe healthprofile:read
GET/v1/system/runtimeSnapshot runtimeAdmin
GET/v1/system/auditAudit log sistemAdmin
GET/v1/system/workersStatus workerAdmin
GET/v1/system/healthHealth sistem detailAdmin
GET/v1/system/eventsSSE operasionalAdmin
GET/v1/system/maintenance/previewPreview cleanupAdmin
POST/v1/system/maintenance/cleanupJalankan cleanupAdmin
POST/v1/system/recovery/runJalankan recoveryAdmin
GET/v1/admin/overviewRingkasan SaaSAdmin
GET/v1/admin/plansDaftar konfigurasi paketAdmin
POST/v1/admin/plansMembuat paket baruAdmin
PATCH/v1/admin/plans/{id}Mengubah paketAdmin
GET/v1/admin/usersDaftar penggunaAdmin
PATCH/v1/admin/users/{id}Mengubah status penggunaAdmin
POST/v1/admin/users/{id}/subscriptionMengatur subscriptionAdmin
GET/v1/admin/change-requestsDaftar approval paketAdmin
POST/v1/admin/change-requests/{id}/{decision}Approve atau reject perubahanAdmin
POST/v1/admin/mediaUpload gambar lokal adminAdmin
GET/v1/admin/payment-channelsDaftar kanal pembayaranAdmin
POST/v1/admin/payment-channelsBuat kanal pembayaranAdmin
PATCH/v1/admin/payment-channels/{id}Ubah kanal pembayaranAdmin
GET/v1/admin/topupsDaftar top-upAdmin
POST/v1/admin/topups/{id}/{decision}Verifikasi top-upAdmin
Contoh request

Kirim pesan dari aplikasi kamu

Gunakan Idempotency-Key yang stabil untuk satu operasi bisnis agar retry jaringan tidak membuat pengiriman baru.

curl -X POST https://pwa.ridped.com/v1/messages/send \
  -H "X-API-Key: ng_live_xxx" \
  -H "Idempotency-Key: order-2026-001" \
  -H "Content-Type: application/json" \
  -d '{
    "deviceId": "dev_customer_service",
    "to": "6281234567890",
    "type": "text",
    "text": "Pesanan Anda sedang diproses.",
    "sendOptions": {
      "guard": true,
      "presence": true,
      "pacing": true,
      "presenceDurationMs": 1200
    }
  }'
Response berhasil
{
  "ok": true,
  "messageId": 123,
  "status": "queued",
  "normalizedTo": "6281234567890"
}
Upload media
  1. Upload binary ke POST /v1/media
  2. Simpan uploadId dari response
  3. Kirim sebagai mediaUploadId
  4. Gunakan file sebelum masa upload berakhir
Payload

Tipe pesan yang tersedia

Buka tipe pesan yang dibutuhkan untuk melihat payload minimal dan catatan field-nya.

01
Pesan tekstype: text
+
{
  "deviceId": "dev_customer_service",
  "to": "6281234567890",
  "type": "text",
  "text": "Pesanan Anda sedang diproses."
}

Field text wajib diisi dan maksimal 4.096 karakter.

02
Gambartype: image
+
{
  "deviceId": "dev_customer_service",
  "to": "6281234567890",
  "type": "image",
  "mediaUploadId": "media_xxx",
  "caption": "Berikut foto produknya."
}

Gunakan mediaUploadId dari POST /v1/media, atau ganti dengan mediaUrl yang dapat diakses melalui HTTPS publik.

03
Videotype: video
+
{
  "deviceId": "dev_customer_service",
  "to": "6281234567890",
  "type": "video",
  "mediaUrl": "https://cdn.example.com/demo.mp4",
  "caption": "Video demonstrasi produk."
}

mediaUrl harus berupa URL HTTPS publik. Untuk file privat, upload lebih dahulu dan gunakan mediaUploadId.

04
Audio / voice notetype: audio
+
{
  "deviceId": "dev_customer_service",
  "to": "6281234567890",
  "type": "audio",
  "mediaUploadId": "media_xxx",
  "mimetype": "audio/ogg; codecs=opus",
  "ptt": true
}

ptt: true mengirim audio sebagai voice note. Gunakan ptt: false atau hilangkan field tersebut untuk audio biasa.

05
Dokumentype: document
+
{
  "deviceId": "dev_customer_service",
  "to": "6281234567890",
  "type": "document",
  "mediaUploadId": "media_xxx",
  "fileName": "invoice-2026.pdf",
  "mimetype": "application/pdf",
  "caption": "Invoice Anda."
}

fileName maksimal 180 karakter. Isi mimetype jika sumber media tidak menyediakan Content-Type yang tepat.

06
Lokasitype: location
+
{
  "deviceId": "dev_customer_service",
  "to": "6281234567890",
  "type": "location",
  "latitude": -6.2,
  "longitude": 106.816666,
  "name": "PN3KN Office",
  "address": "Jakarta, Indonesia"
}

latitude wajib berada pada -90 sampai 90 dan longitude pada -180 sampai 180. name dan address bersifat opsional.

07
Reactiontype: reaction
+
{
  "deviceId": "dev_customer_service",
  "to": "6281234567890",
  "type": "reaction",
  "emoji": "👍",
  "targetMessageId": "3EB0XXXXXXXXXXXX",
  "targetFromMe": false
}

targetMessageId adalah ID pesan WhatsApp yang akan diberi reaction. Untuk pesan grup, participant dapat diisi dengan JID pengirim pesan target.

Upload binary media

Gunakan alur ini untuk file lokal sebelum mengirim image, video, audio, atau document.

curl -X POST https://pwa.ridped.com/v1/media \
  -H "X-API-Key: pn3kn_xxx" \
  -H "Content-Type: application/octet-stream" \
  -H "X-File-Name: invoice.pdf" \
  -H "X-Media-Mime-Type: application/pdf" \
  --data-binary "@invoice.pdf"
Error handling

Bedakan error input, akses, dan kegagalan sementara.

Simpan status HTTP, error code, message, dan requestId. Retry hanya ketika error memang bersifat sementara.

400Payload atau parameter tidak valid
401Kredensial tidak tersedia
403Akses, scope, origin, atau role ditolak
409State resource sedang berbenturan
429Rate limit atau quota tercapai
5xxKegagalan sementara; retry dengan backoff
Contoh
{
  "error": "API_SCOPE_DENIED",
  "message": "API key requires scope: messages:send",
  "requestId": "req_01J..."
}