Skip to main content
PUT
/
api
/
v1.0
/
virtual-accounts
/
{account_id}
/
{virtual_account_id}
Update
curl --request PUT \
  --url https://sandbox-payment-b2b.singapay.id/api/v1.0/virtual-accounts/{account_id}/{virtual_account_id} \
  --header 'Authorization: Bearer <token>' \
  --header 'Content-Type: application/json' \
  --header 'X-PARTNER-ID: <api-key>' \
  --data '
{
  "status": "active",
  "name": "Bakso Enak- John Doe",
  "amount": 100000,
  "min_amount": 10000,
  "max_amount": 100000,
  "expired_at": "1774000000000",
  "max_usage": 1
}
'
{
  "status": 200,
  "success": true,
  "data": {
    "id": "01K946KF851RK7FX075GJHBVKF",
    "number": "9090583126022726",
    "code": "VA_BNI",
    "bank": {
      "short_name": "BRI",
      "number": "002",
      "swift_code": "BRINIDJA"
    },
    "amount": {
      "value": "1234.56",
      "currency": "IDR"
    },
    "amount_type": "closed",
    "status": "active",
    "kind": "temporary",
    "current_usage": 0,
    "expired_at": 1774000000000,
    "name": "Bakso Enak- John Doe",
    "merchant_reff_no": "INV-2026-001",
    "min_amount": {
      "value": "1234.56",
      "currency": "IDR"
    },
    "max_amount": {
      "value": "1234.56",
      "currency": "IDR"
    }
  }
}

Authorizations

Authorization
string
header
required

JWT issued by POST /api/v1.1/access-token/b2b. Send Authorization: Bearer <token>.

X-PARTNER-ID
string
header
required

Merchant API key (Credential.api_key). Required on every request.

Path Parameters

account_id
string
required

Account identifier in ULID format.

virtual_account_id
string
required

Virtual account identifier in ULID format. Use this value in path parameters (not the VA number).

Body

application/json
status
enum<string>
required

Virtual account lifecycle status.

Available options:
active,
inactive,
expired
Example:

"active"

name
string | null

Display name for the virtual account.

Maximum string length: 200
Example:

"Bakso Enak- John Doe"

amount
number

Fixed payment amount. Required when updating a closed virtual account. Limits depend on merchant configuration.

Example:

100000

min_amount
number

Minimum payment amount. Required when updating an open virtual account.

Example:

10000

max_amount
number

Maximum payment amount. Required when updating an open virtual account and must be greater than or equal to min_amount.

Example:

100000

expired_at
string

Expiration time as a Unix timestamp in milliseconds (13 digits). Required when virtual account kind is temporary.

Pattern: ^\d{13}$
Example:

"1774000000000"

max_usage
integer

Maximum number of successful payments allowed. Required when virtual account kind is temporary.

Required range: 1 <= x <= 255
Example:

1

Response

Updated

status
integer
required

HTTP status code.

Example:

200

success
boolean
required

Indicates whether the request was successful.

Example:

true

data
object

Virtual account resource payload.