Guides/For developers

You want customers to choose a package and pay from WhatsApp without opening another app, the way WACO renews itself.

A recipe to replicate WACO's "renew via WhatsApp" for your own billing: incoming-message webhook → offer packages with /api/v1/tombol → the choice comes back via webhook → create the invoice + QR in your system → send the QR image with /api/v1/kirim-media → confirm payment with /api/v1/balas. 2 min read

WACO renews its own subscriptions over WhatsApp (see the guide). That flow is built from four ingredients that are all available to you through the API, nothing proprietary.

Ingredients

The flow

  1. The webhook receives {"pesan":{"teks":"perpanjang"},"dari":"628…"}. Your system looks up the account by number.
  2. Offer packages:
    POST /api/v1/tombol
    {"nomor":"628111222333",
     "judul":"Renew subscription",
     "teks":"Account: Toko Maju
    Active until 30 September 2026
    
    Pick a package:",
     "tombol":[{"id":"paket:1","judul":"1 month Rp200k"},
               {"id":"paket:6","judul":"6 months Rp1.1M"},
               {"id":"paket:12","judul":"12 months Rp2M"}]}
  3. The webhook receives the reply: "pesan":{"tipe":"interactive","pilihan":{"id":"paket:6","judul":"6 months Rp1.1M"}}. Your system creates the invoice and QR at your payment gateway and places the QR image at a public https URL (tokenised and expiring is fine).
  4. Send the QR:
    POST /api/v1/kirim-media
    {"nomor":"628111222333","tipe":"image",
     "url":"https://app.example.com/qr/inv-2026-0912.png",
     "caption":"6-month package. Rp 1,221,000 incl. VAT. Valid 30 minutes."}
  5. When your payment gateway reports the payment, confirm it:
    POST /api/v1/balas
    {"nomor":"628111222333","teks":"Payment received. Subscription active until 31 March 2027. Thank you!"}
In n8n: one Webhook node receives messages, one IF separates the text "perpanjang" from choice replies, two HTTP Request nodes call /api/v1/tombol and /api/v1/kirim-media. Store the choice id as "paket:" so you never match on titles.
Everything above is a session message, valid only within 24 hours of the customer's last message. To nudge a silent customer, start with a template (e.g. an expiry reminder) and continue this flow once they reply.
Still stuck after following this guide? Contact us from the dashboard, attach a screenshot if you have one, it speeds everything up.