Payment Docs
Payments by countryAsia

Indonesia

Local payment methods in IDR

Before you start

This payment method is not enabled for all merchants. Check availability with your manager.

Overview

CurrencyPayment method
IDRLocal bank and wallet methods

The payer is redirected to paymentLink and chooses a method on the provider page.

What is different from a regular order

The order is created through the standard POST /v1/orders endpoint. The base fields (amount, currency, successUrl, failUrl, callbackUrl, etc.) are the same as for a regular order; on top of them you pass the customer object with payer details.

FieldTypeDescription
customerobjectPayer details. The required set is listed below

The externalUserId field is required for this payment method.

Customer fields

FieldTypeRequiredDescription
phonestring✅ YesPhone number: 10–13 digits starting with 08 or 628
emailstring✅ YesPayer email
firstNamestring✅ YesFirst name, must match the phone number owner
lastNamestring✅ YesLast name, must match the phone number owner

Pass the payer's real data. Names and phone numbers are checked against the phone number owner on the provider side; mismatches lead to declined payments.

Request example

{
  "purpose": "Payment for order #1234",
  "amount": "5000",
  "currency": "IDR",
  "externalId": "23456789",
  "externalUserId": "437568",
  "successUrl": "https://example.com/success",
  "failUrl": "https://example.com/fail",
  "callbackUrl": "https://example.com/webhooks/payments",
  "customer": {
    "lastName": "Santoso",
    "firstName": "Budi",
    "email": "budi.santoso@example.com",
    "phone": "6281245907765"
  }
}

Response

The response is a standard order object. The order is created with the CREATED status; redirect the payer to paymentLink to complete the payment.

Order object fields

Next steps

H2H and the payment form

Ask your manager to enable H2H for the required method. The create-order request stays the same unless an extra field is listed below. Open the returned paymentLink: the platform payment form displays the QR code, bank details, or wallet action and waits for the final result. Existing payment-page integrations remain available.

H2H supports QRIS; virtual accounts at BRI, BNI, Mandiri, Permata, CIMB and BCA; and OVO, DANA, DANA2 and LinkAja wallets. The method is configured on the terminal. QRIS displays a QR, virtual accounts display bank details and any required transfer reference, and wallets open their payment action or request confirmation on the phone.

Receiving a QR payload via API

For a method that issues a QR code, request the raw payload after creating the order:

curl -X POST "https://api.panel.valutix.kz/v1/orders/{orderId}/h2h/qr" \
  -H "x-api-token: YOUR_API_TOKEN"
{ "qrPayload": "RAW_PAYMENT_QR_PAYLOAD" }

Generate the QR image from qrPayload without changing its contents. This endpoint is available only when H2H is enabled and the selected method actually returns a QR payload; a wallet link or phone confirmation is not a QR payload. Do not replace a missing payload with paymentLink. Keep waiting for the final order status or callback; receiving payment instructions does not mean the order is paid.

Receiving bank details via API

curl -X POST "https://api.panel.valutix.kz/v1/orders/{orderId}/h2h/bank-transfer" \
  -H "x-api-token: YOUR_API_TOKEN"

The response contains accountNumber, accountName, bankName, bankCode, amount, currency, and details. Missing optional values are null. Show every returned entry in details, including the branch or transfer reference. Repeated calls reuse the same payment. HTTP 503 means details are not ready; retry after a few seconds. HTTP 400 means this method does not issue bank details (or the order is a test order), 404 means the order was not found, and 409 means it is no longer payable.

On this page