AKD Pay developer documentation
Accept QRIS and Virtual Account payments through one API
AKD Pay is a payment integration service for merchants in Indonesia: one API to accept QRIS and Virtual Account payments in rupiah. Your server creates a payment, shows the buyer a QR code or VA number, and receives a signed webhook when the payment is paid, fails, or expires. The Merchant Dashboard shows transactions, revenue, and webhook history, and the sandbox lets you test everything without real money.
Start here#
- QuickstartFrom sign-up to your first webhook in about 15 minutes.
- Onboarding flowThe steps from sandbox to go-live, and who does what.
- Sandbox vs LiveSame API; different addresses, credentials, and money.
- API referenceAuthentication, payments, statuses, idempotency, and error codes.
- Webhooks & signaturesEvents, V2 signature verification (Node.js, PHP, Go), retries.
- Testing checklistWhat must pass in the sandbox before you apply for live.
How it works#
- Your server calls
POST /v1/paymentswith your API key,project_id, amount, and method (QRISorVIRTUAL_ACCOUNT). - The response contains
checkout: a QR string (checkout.qr_string) or a VA number (checkout.account_number). Show it to the buyer. - The buyer pays. AKD sends a
payment.paidwebhook to your HTTPS endpoint, signed withX-AKD-Signature-V2. - Your server verifies the signature, marks the order paid exactly once, and answers
2xx.
All amounts are in IDR, whole numbers. API addresses and examples in these docs use the sandbox; the differences from live are listed in Sandbox vs Live.