Build Static Payment
Applicable only for QRIS and Virtual Account, and the mode is API
Finalize Payment Method early
If you choose autoConfirm
= true, The payment will be automatically confirmed after you complete the API mode flow — no additional confirmation step is needed

Create Payment Static
A windowed time for the end customer to complete the payment, starting when the client initiates the payment request through your app. For Static Payment, the payment session is always ACTIVE and can be charged multiple times.
API Reference: Create Payment Session
POST [BASE_URL]/v2/payments
{
"clientReferenceId": "1751610085",
"amount": { // Mandatory if VA is Closed Static
"value": 10000,
"currency": "IDR"
},
"paymentType": "MULTIPLE",
"paymentMethod": {
"type": "VIRTUAL_ACCOUNT"
},
"paymentMethodOptions": {
"virtualAccount": {
"channel": "PERMATA",
"virtualAccountName": "Reforza Pivot",
"virtualAccountNumber": "00000001"
}
},
"mode": "API",
"redirectUrl": {
"successReturnUrl": "https://merchant.com/success",
"failureReturnUrl": "https://merchant.com/failure",
"expirationReturnUrl": "https://merchant.com/expiration"
},
"autoConfirm": true,
"statementDescriptor": "Reforza Pivot",
"metadata": {
"invoiceNo": "INV001"
}
}
Choose a Payment Type
To create Payment Static, choose Payment Type “MULTIPLE”
{
"paymentType": "MULTIPLE"
}
Send your Amount object (*conditional)
Only for the Closed Static Virtual Account, you must send the Amount object
{
"amount": {
"value": 10000,
"currency": "IDR"
}
}
Define Payment Method
Set autoConfirm
to true and fill paymentMethod
and paymentMethodOptions
Object to finalize the payment method from the previous step.
Make sure virtualAccountNumber
within our default Static Range or your Configuration range
Reference:
{
"paymentMethod": {
"type": "VIRTUAL_ACCOUNT"
},
"paymentMethodOptions": {
"virtualAccount": {
"channel": "PERMATA",
"virtualAccountName": "Reforza Pivot",
"virtualAccountNumber": "99996662"
}
},
"autoConfirm": true
}
Get Payment Information details
After creating the Payment Session, display the payment information details on your customized Payment page, which is returned in the response.
Object Reference: Payment Method Object
{
"paymentMethod": {
"type": "VIRTUAL_ACCOUNT",
"virtualAccount": {
"channel": "PERMATA",
"virtualAccountNumber": "7699013199996662",
"virtualAccountName": "Reforza Pivot",
"expiryAt": "0001-01-01T00:00:00Z"
}
}
}
Finalize Payment Method later
If you choose autoConfirm
= false, Payment Method can be submitted later during the confirmation step using the confirm API

Create Payment Static
A windowed time for the end customer to complete the payment, starting when the client initiates the payment request through your app. For Static Payment, the payment session is always ACTIVE and can be charged multiple times.
API Reference: Create Payment Session
POST [BASE_URL]/v2/payments
{
"clientReferenceId": "1751612565",
"amount": {
"value": 10000, // Mandatory if VA is Closed Static
"currency": "IDR"
},
"paymentType": "MULTIPLE",
"mode": "API",
"redirectUrl": {
"successReturnUrl": "https://merchant.com/success",
"failureReturnUrl": "https://merchant.com/failure",
"expirationReturnUrl": "https://merchant.com/expiration"
},
"autoConfirm": false,
"statementDescriptor": "Reforza Pivot",
"metadata": {
"invoiceNo": "INV001"
}
}
Choose a Payment Type
To create Payment Static, choose Payment Type “MULTIPLE”
{
"paymentType": "MULTIPLE"
}
Send your Amount object (*conditional)
Only for the Closed Static Virtual Account, you must send the Amount object
{
"amount": {
"value": 10000,
"currency": "IDR"
}
}
Confirm Payment Session
If you set autoConfirm
to false on the Create Payment Session API, you can finalize the Payment Method by filling paymentMethod
and paymentMethodOptions
objects
Make sure virtualAccountNumber
within our default Static Range or your Configuration range
Reference:
POST [BASE_URL]/v2/payments/{id}/confirm
{
"paymentMethod": {
"type": "VIRTUAL_ACCOUNT"
},
"paymentMethodOptions": {
"virtualAccount": {
"channel": "PERMATA",
"virtualAccountName": "Reforza Pivot",
"virtualAccountNumber": "99996662"
}
}
}
Get Payment Information details
After confirming the Payment Session, display the payment information details on your customized Payment page, which is returned in the response.
Object Reference: Payment Method Object
{
"paymentMethod": {
"type": "VIRTUAL_ACCOUNT",
"virtualAccount": {
"channel": "PERMATA",
"virtualAccountNumber": "7699013199996662",
"virtualAccountName": "Reforza Pivot",
"expiryAt": "0001-01-01T00:00:00Z"
}
}
}
Last updated