PAYWISE
en
← All articles

Guides

How to accept QRIS payments with PAYWISE

A step-by-step guide to your first QRIS payment: create it with one API call, show the QR code, and confirm it with a signed webhook.

Published 03 October 2026 3 min read

Also available in: Indonesia, 简体中文

How to accept QRIS payments with PAYWISE

QRIS is Indonesia's national QR code standard. One code can be paid from any Indonesian bank or e-wallet app, so your customers don't need a particular app to pay you. With PAYWISE you create the QR code through one API call and get notified the moment it is paid.

The four steps of a QRIS payment: create, show the QR code, customer pays, webhook

Before you start

You need a PAYWISE account and an API key. Create a sandbox key first (it starts with pw_test_): it works exactly like a live key, but no real money moves. You can create keys in your dashboard under API Keys. The full key is shown only once, so store it somewhere safe.

Step 1: Create the payment

When your customer checks out, your server creates a transaction:

curl -X POST https://paywise.asia/api/v1/transactions \
  -H "Authorization: Bearer pw_test_..." \
  -H "Content-Type: application/json" \
  -d '{"merchant_reference":"ORDER-1001","customer_id":"user-42","amount":150000,"payment_method":"QRIS"}'
  • merchant_reference is your own order ID. If a request times out and you send it again, PAYWISE returns the original transaction instead of creating a second one.
  • customer_id (required) is your own ID for the customer, for example a user ID or email, so you can see who paid.
  • amount is in whole rupiah, from 1,000 to 10,000,000 per payment.
  • expires_in (optional) sets how long the QR code can be paid, from 60 to 1,200 seconds (the default).

Step 2: Show the QR code

The response contains the QR data. You can draw the QR code on your own page, or simply send your customer to checkout_url: a PAYWISE payment page with the QR code, a countdown and the payment status, which updates by itself. The payment page is turned on per website in your dashboard.

Step 3: Confirm the payment with a webhook

Your customer scans the code with their banking or e-wallet app and pays. PAYWISE then sends a payment.paid webhook to your server. Fulfil the order on that webhook, after checking its signature, not on the customer's return to your website: anyone can type a return URL.

Read Verifying webhook signatures to see how.

Step 4: Go live

When your sandbox tests pass, create a live key (pw_live_...) and replace the sandbox key. Your code stays the same. Paid QRIS transactions are then settled in batches during the day and can be withdrawn to your bank account, see Settlement and withdrawals, explained.

Good to know

  • You only pay a fee on paid transactions. Pending, failed and expired ones cost nothing. See the pricing page for the current rate.
  • Every API call is logged in your dashboard with its status and request ID, which makes debugging easy.
  • The full reference is in the API documentation.

More articles

Start with a sandbox key today.

Create an account, generate a sandbox key, and send your first transaction from the playground in minutes.