| Method | Path | Format | Authentication |
|---|
| POST | /api/v1.0/virtual-accounts/{account_id} | json | OAuth 2.0 with Access Token |
| Field | Value | Type | Mandatory | Length | Description | Example |
|---|
| X-PARTNER-ID | api_key | Alphanumeric | Mandatory | | API key obtained from the merchant dashboard. | b3ed7d4b-a96c-6c08-b3c7-12c3124242d9 |
| Accept | application/json | Alphabetic | Mandatory | | Specifies JSON as the expected response format. | application/json |
| Authorization | Bearer {bearerToken} | Alphanumeric | Mandatory | | Bearer token obtained from the get access token endpoint. | Bearer eyJ0eXAiOiJKV1{…} |
| Field | Type | Mandatory | Length | Description | Example |
|---|
| bank_code | String | Yes | - | Bank code like BRI, BNI, DANAMON, MAYBANK, MANDIRI | BRI |
| amount_type | Enum | No | - | open or closed. Defaults to closed. Open VA accepts flexible payment amount within min/max range. | closed |
| min_amount | Numeric | No | - | Minimum payment amount for open VA. Optional — if not provided, defaults to merchant’s configured VA minimum limit. | 10000 |
| max_amount | Numeric | No | - | Maximum payment amount for open VA. Optional — if not provided, defaults to merchant’s configured VA maximum limit. Must be >= min_amount. | 5000000 |
| name | String | No | - | virtual account name that show when inquiry & payment | Dhany Nurdiansyah |
| merchant_reff_no | String | No | 255 | Merchant reference number for tracing. This value will be returned in webhook callback. | INV-2026-001 |
| amount | Numeric | Conditional | - | Amount of transaction. Required if amount_type is closed (default). Not used for open VA. | 1000000 |
| kind | Enum | Yes | - | temporary or permanent | temporary |
| expired_at | Timestamp | Conditional | 13 | Expired at in Unix timestamp millisecond format. Required if kind is temporary. | 1760643599000 |
| max_usage | Numeric | No | - | Maximum number of times the VA can be used. Default is 255. | 255 |
| currency | String | No | 3 | Currency code (e.g., IDR). Defaults to IDR. | IDR |
Virtual Account Type (kind) | expired_at Behavior |
|---|
| temporary | The expiration is determined by the expired_at value. |
| permanent | The expired_at value can be null. |
{
"bank_code":"BRI",
"amount" : 1000000,
"name" : "Dhany Nurdiansyah",
"merchant_reff_no" : "INV-2026-001",
"kind" : "temporary",
"expired_at" : 1760643599000,
"max_usage":255
}
{
"bank_code":"BRI",
"amount_type": "open",
"min_amount": 10000,
"max_amount": 5000000,
"name": "Dhany Nurdiansyah",
"kind": "permanent"
}
{
"bank_code":"BRI",
"amount_type": "open",
"name": "Dhany Nurdiansyah",
"kind": "permanent"
}
| Field | Type | Mandatory | Length | Description | Example |
|---|
| status | Numeric | Mandatory | 3 | HTTP status code of the response | 200 |
| success | Boolean | Mandatory | 1 | Indicates whether the request was successful | true |
| data | Object | Conditional | - | Contains details about the virtual account | - |
| > id | Alphanumeric | Mandatory | - | Unique identifier for the virtual account | 01K6D34A9GNATKP76AQ1DGPQBG |
| > number | Numeric | Mandatory | 16 | Virtual account number | 9090777158248126 |
| > name | Alphabetic | Mandatory | - | Virtual account name | Dhany |
| > merchant_reff_no | String | Optional | 255 | Merchant reference number for tracing | INV-2026-001 |
| > code | Alphanumeric | Mandatory | - | Virtual account bank code (e.g., VA_BRI) | VA_BRI |
| > bank | Object | Mandatory | - | Contains bank details | - |
| >> short_name | Alphabetic | Mandatory | - | Bank’s short name | BRI |
| >> number | Alphanumeric | Mandatory | - | Bank’s internal numeric code | 002 |
| >> swift_code | Alphanumeric | Optional | - | SWIFT code of the bank (if applicable) | BRINIDJA |
| > amount | Object | Mandatory | - | Contains amount value and currency | - |
| >> value | Decimal | Mandatory | - | Amount value in string format | 100000.00 |
| >> currency | Alphabetic | Mandatory | 3 | Currency code in ISO 4217 format | IDR |
| > amount_type | Enum | Mandatory | - | Type of amount: open or closed | closed |
| > min_amount | Object/Null | Conditional | - | Min amount details (only for open VA, null for closed) | - |
| >> value | Decimal | Conditional | - | Min amount value | 10000.00 |
| >> currency | Alphabetic | Conditional | 3 | Currency code | IDR |
| > max_amount | Object/Null | Conditional | - | Max amount details (only for open VA, null for closed) | - |
| >> value | Decimal | Conditional | - | Max amount value | 5000000.00 |
| >> currency | Alphabetic | Conditional | 3 | Currency code | IDR |
| > status | Enum | Mandatory | - | Status of the virtual account (e.g., “active”, “expired”) | active |
| > kind | Enum | Mandatory | - | Type of virtual account (“permanent” or “temporary”) | permanent |
| > current_usage | Numeric | Mandatory | - | Current number of times the VA has been used | 0 |
Success: Here’s an example of a successful response.
{
"status": 200,
"success": true,
"data": {
"id": "01K6D34A9GNATKP76AQ1DGPQBG",
"number": "9090777158248126",
"name": "Dhany",
"merchant_reff_no": "INV-2026-001",
"code": "VA_BRI",
"bank": {
"short_name": "BRI",
"number": "002",
"swift_code": "BRINIDJA"
},
"amount": {
"value": "100000.00",
"currency": "IDR"
},
"amount_type": "closed",
"min_amount": null,
"max_amount": null,
"status": "active",
"kind": "permanent",
"current_usage": 0
}
}
Success (Open VA): Here’s an example of a successful response for an open virtual account.
{
"status": 200,
"success": true,
"data": {
"id": "01K6D34A9GNATKP76AQ1DGPQBG",
"number": "9090777158248126",
"name": "Dhany Nurdiansyah",
"code": "VA_BRI",
"bank": {
"short_name": "BRI",
"number": "002",
"swift_code": "BRINIDJA"
},
"amount": {
"value": "0.00",
"currency": "IDR"
},
"amount_type": "open",
"min_amount": {
"value": "10000.00",
"currency": "IDR"
},
"max_amount": {
"value": "5000000.00",
"currency": "IDR"
},
"status": "active",
"kind": "permanent",
"current_usage": 0
}
}
Error: This is an example of an unsuccessful request.
{
"status": 422,
"success": false,
"error": {
"code": 422,
"message": "Validation error",
"errors": {
"max_usage": [
"Max Usage is 255"
]
}
}
}
| bank_code | Bank Name |
|---|
| BRI | Bank Rakyat Indonesia (BRI) |
| BNI | Bank Negara Indonesia (BNI) |
| DANAMON | Bank Danamon Indonesia |
| MAYBANK | Maybank Indonesia |
| BCA | Bank Central Asia (BCA) |
| MANDIRI | Bank Mandiri Indonesia (Soon) |
| PERMATA | Bank Permata Indonesia (Soon) |
| BSI | Bank Syariah Indonesia (Soon) |
| CIMB | Bank CIMB Niaga (Soon) |