Skip to main content

Virtual Account (VA)

SNAP API

Integrasi Virtual Account (VA)

Virtual Account (VA) adalah metode pembayaran transfer bank otomatis dari Winpay yang terintegrasi penuh melalui standar SNAP BI. Dukung otomasi rekonsiliasi pembayaran bisnis Anda secara real-time via callback.

Jenis Virtual Account

Layanan Virtual Account Winpay mendukung tiga jenis tipe transaksi berikut:

ONE OFF (c)

VA sekali pakai yang otomatis tidak aktif setelah satu kali pembayaran sukses dilakukan. Ideal untuk pembayaran invoice tunggal.

OPEN RECURRING (o)

VA yang dapat digunakan berkali-kali untuk pembayaran bertahap di mana pelanggan bebas menentukan nominal transfer sendiri (open payment).

CLOSE RECURRING (r)

VA berkala yang nominal pembayarannya sudah dikunci oleh merchant (close payment). Pelanggan tidak dapat memasukkan nominal sendiri.

Metode Pembayaran Yang Di Dukung

Berikut adalah metode pembayaran yang didukung oleh masing-masing jenis VA:

Channel CodeInstitusiOne Off (c)Open Recurring (o)Close Recurring (r)
BRIBank Rakyat Indonesia
BNIBank Negara Indonesia
MANDIRIBank Mandiri
MANDIRIPCBank Mandiri (Payment Code)
PERMATABank Permata
BSIBank Syariah Indonesia
MUAMALATBank Muamalat
BCABank Central ASIA
CIMBBank CIMB NIAGA
SINARMASBank Sinarmas
BNCBank Neo Commerce
MAYBANKMaybank

Transaksi Virtual Account

1. Create VA

POST/v1.0/transfer-va/create-vaService Code: 27

Layanan ini digunakan untuk membuat Virtual Account (VA) baru.

Payload Request

ParameterTipe DataWajibDeskripsi
customerNoStringCNomor Virtual Account (if applicable)
Wajib jika virtualAccountTrxType = o / r
Length: 3-14
Karakter yang Diizinkan: numeric
Jika virtualAccountTrxType = c dan nomor VA tidak tersedia, maka nomor VA akan di generate secara acak
virtualAccountNameStringYNama Virtual Account
Length: 5-24
Karakter yang Diizinkan: huruf (a-z, A-Z), angka (0-9), garis bawah (_), tanda hubung (-), dan spasi (\s)
trxIdStringYNomor transaksi
Length: 5-50
Karakter yang Diizinkan: huruf (a-z, A-Z), angka (0-9), garis bawah (_) dan tanda hubung (-)
totalAmountObjectCTotal nominal transaksi
Wajib jika virtualAccountTrxType = c / r
valueStringYNilai transaksi
Length: 1-14
Karakter yang Diizinkan: numeric
currencyStringYKode mata uang
Length: 3
Allowed Value: IDR
virtualAccountTrxTypeStringYJenis transaksi VA
Allowed Value: c / o / r
expiredDateStringCTanggal expired transaksi
Format: YYYY-MM-DDTHH:mm:ss+07:00
Wajib jika virtualAccountTrxType = c / r
Harus lebih dari 1 menit dan maksimal 3 bulan dari waktu request
additionalInfoObjectYInformasi tambahan
channelStringYKode channel
Allowed Value: BRI / BNI / MANDIRI / PERMATA / BSI / MUAMALAT / BCA / CIMB / SINARMAS / BNC
{
"customerNo": "000003212",
"virtualAccountName": "Chus Pandi",
"trxId": "INV-000000023212x2221",
"totalAmount": {
"value": "25000.00",
"currency": "IDR"
},
"virtualAccountTrxType": "c",
"expiredDate": "2023-09-05T19:30:14+07:00",
"additionalInfo": {
"channel": "CIMB"
}
}

Response Payload

ParameterTipe DataDeskripsi
responseCodeStringKode response
responseMessageStringPesan response
virtualAccountDataObjectData VA yang telah dibuat
partnerServiceIdStringKode BIN dari bank
customerNoStringNomor Customer
virtualAccountNoStringNomor Virtual Account
virtualAccountNameStringNama Virtual Account
trxIdStringNomor transaksi merchant
totalAmountObjectTotal nominal transaksi
valueStringNilai transaksi yang dibayar oleh customer
currencyStringKode mata uang
virtualAccountTrxTypeStringJenis transaksi VA
expiredDateStringTanggal expired transaksi
additionalInfoObjectInformasi tambahan
channelStringKode channel
contractIdStringReferensi transaksi yang dihasilkan oleh Winpay
{
"responseCode": "2002700",
"responseMessage": "Success",
"virtualAccountData": {
"partnerServiceId": " 22691",
"customerNo": "41693898987",
"virtualAccountNo": " 2269141693898987",
"virtualAccountName": "Chus Pandi",
"trxId": "INV-000000023212x2221",
"totalAmount": {
"value": "25000.00",
"currency": "IDR"
},
"virtualAccountTrxType": "c",
"expiredDate": "2023-09-05T19:30:14+07:00",
"additionalInfo": {
"channel": "CIMB",
"contractId": "cia80bff69-1073-4811-b1e1-13b738784d8b"
}
}
}

List Response Codes

Response CodeResponse MessageDescription
2002700Success
4002700Bad RequestKegagalan request umum, termasuk kegagalan saat memproses pesan
4002701Invalid field format { field name }
4002702Invalid mandatory field {field name}
4012700Invalid signatureX-Signature salah
4042716Partner not foundX-Partner-ID tidak terdaftar
4092700Cannot use same X-EXTERNAL-ID in same dayX-External-ID sudah pernah digunakan di hari yang sama
4092701Duplicate trxIdtrxId sudah pernah digunakan
5002700General ErrorKesalahan umum
5002701Internal Server ErrorKegagalan internal server yang tidak dikenal. Silakan coba prosesnya kembali

2. Inquiry VA

POST/v1.0/transfer-va/inquiry-vaService Code: 30

Layanan ini digunakan untuk mengecek status virtual akun aktif atau tidak.

Payload Request

ParameterTipe DataWajibDeskripsi
trxIdStringYNomor transaksi
Length: 5-50
Karakter yang Diizinkan: huruf (a-z, A-Z), angka (0-9), garis bawah (_) dan tanda hubung (-)
additionalInfoObjectYInformasi tambahan
contractIdstringYcontractId dari create VA
{
"trxId": "INV-000000023212x22",
"additionalInfo": {
"contractId": "ci302a21c9-bb4b-40c5-880d-e99691ed0af9"
}
}

Response Payload

ParameterTipe DataDeskripsi
responseCodeStringKode response
responseMessageStringPesan response
virtualAccountDataObjectData VA yang telah dibuat
partnerServiceIdStringKode BIN dari bank
customerNoStringNomor Customer
virtualAccountNoStringNomor Virtual Account
virtualAccountNameStringNama Virtual Account
trxIdStringNomor transaksi merchant
totalAmountObjectTotal nominal transaksi
valueStringNilai transaksi yang dibayar oleh customer
currencyStringKode mata uang
virtualAccountTrxTypeStringJenis transaksi VA
expiredDateStringTanggal expired transaksi
additionalInfoObjectInformasi tambahan
channelStringKode channel
contractIdStringReferensi transaksi yang dihasilkan oleh Winpay
{
"responseCode": "2003000",
"responseMessage": "Success",
"virtualAccountData": {
"virtualAccountNo": "2269186000003212",
"virtualAccountName": "Mas Nchus",
"trxId": "INV-000000023212x22",
"totalAmount": {
"value": "25000.00",
"currency": "IDR"
},
"expiredDate": "2023-09-01T19:30:14+00:00",
"additionalInfo": {
"channel": "CIMB",
"contractId": "ci302a21c9-bb4b-40c5-880d-e99691ed0af9"
}
}
}

List Response Codes

Response CodeResponse MessageDescription
2003000Success
4003000Bad RequestKegagalan request umum, termasuk kegagalan saat memproses pesan
4003001Invalid field format { field name }
4003002Invalid mandatory field {field name}
4013000Invalid signatureX-Signature salah
4043001Transaction not foundtrxId dan contractId tidak ditemukan
4043016Partner not foundX-Partner-ID tidak terdaftar
4093000Cannot use same X-EXTERNAL-ID in same dayX-External-ID sudah pernah digunakan di hari yang sama
4093001Duplicate trxIdtrxId sudah pernah digunakan
5003000General ErrorKesalahan umum
5003001Internal Server ErrorKegagalan internal server yang tidak dikenal. Silakan coba prosesnya kembali
5003002reqbill not foundcontractId tidak ditemukan

3. Inquiry Status

POST/v1.0/transfer-va/statusService Code: 26

Layanan ini digunakan untuk memeriksa status transaksi dari virtual account.

Payload Request

ParameterTipe DataWajibDeskripsi
virtualAccountNoStringYNomor Virtual Akun
trxIdStringYId Transaksi
Length: 5-50
Karakter yang Diizinkan: huruf (a-z, A-Z), angka (0-9), garis bawah (_) dan tanda hubung (-)
additionalInfoObjectYInformasi tambahan
contractIdstringYcontractId dari create VA
{
"virtualAccountNo": " 2269141708949044",
"additionalInfo": {
"contractId": "ciaf1b982a-9d06-4e27-ba39-a6aefd9e813d",
"channel": "CIMB",
"trxId": "xxxxxxxxxxx13"
}
}

Response Payload

ParameterTipe DataDeskripsi
responseCodeStringKode Respon
responseMessageStringPesan Respon
virtualAccountDataObjectData VA yang telah dibuat
virtualAccountNoStringNomor Virtual Akun
virtualAccountNameStringNama Virtual Akun
paymentFlagStatusStringStatus Transaksi VA (00 - paid, 01 - unpaid, 02 - check)
transactionDateStringTanggal Transaksi
referenceNoStringNomor referensi pembayaran
totalAmountObjectTotal jumlah transaksi
valueStringNilai transaksi yang dibayarkan oleh pelanggan
currencyStringKode mata uang
additionalInfoObjectInformasi tambahan
channelStringKode Chanel
contractIdStringReferensi transaksi yang dihasilkan oleh Winpay
trxIdStringNomor transaksi merchant
{
"responseCode": "2002600",
"responseMessage": "Successful",
"virtualAccountData": {
"virtualAccountNo": "2269141708949044",
"virtualAccountName": "Valid 14",
"paymentFlagStatus": "00",
"transactionDate": "2024-02-26T19:04:51+00:00",
"referenceNo": "50966",
"totalAmount": {
"value": "15000.00",
"currency": "IDR"
}
},
"additionalInfo": {
"contractId": "ciaf1b982a-9d06-4e27-ba39-a6aefd9e813d",
"channel": "CIMB",
"trxId": "xxxxxxxxxxx13"
}
}

List Response Codes

Response CodeResponse MessageDescription
2002600Success
4002600Bad RequestKegagalan request umum, termasuk kegagalan saat memproses pesan
4002601Invalid field format { field name }
4002602Invalid mandatory field {field name}
4012600Invalid signatureX-Signature salah
4042601Transaction not foundtrxId dan contractId tidak ditemukan
4042616Partner not foundX-Partner-ID tidak terdaftar
4092600Cannot use same X-EXTERNAL-ID in same dayX-External-ID sudah pernah digunakan di hari yang sama
4092601Duplicate trxIdtrxId sudah pernah digunakan
5002600General ErrorKesalahan umum
5002601Internal Server ErrorKegagalan internal server yang tidak dikenal. Silakan coba prosesnya kembali
5002602reqbill not foundcontractId tidak ditemukan

4. Delete VA

DELETE/v1.0/transfer-va/delete-vaService Code: 31

Layanan ini digunakan untuk membatalkan virtual account dengan status unpaid.

Payload Request

ParameterTipe DataWajibDeskripsi
virtualAccountNoStringYNomor Virtual Akun
trxIdStringYId Transaksi
Length: 5-50
Karakter yang Diizinkan: huruf (a-z, A-Z), angka (0-9), garis bawah (_) dan tanda hubung (-)
additionalInfoObjectYInformasi tambahan
contractIdstringYcontractId dari create VA
channelStringKode channel
{
"virtualAccountNo": " 2269131710748503",
"trxId": "XINV-000000170104",
"additionalInfo": {
"contractId": "ci067a0336-4ddf-4001-9cef-3eb107c331f4",
"channel": "CIMB"
}
}

Response Payload

ParameterTipe DataDeskripsi
responseCodeStringKode Respon
responseMessageStringPesan Respon
virtualAccountDataObjectData VA yang telah dibuat
trxIdStringNomor transaksi merchant
additionalInfoObjectInformasi tambahan
contractIdStringReferensi transaksi yang dihasilkan oleh Winpay
channelStringKode Channel
{
"responseCode": "2003100",
"responseMessage": "Success",
"virtualAccountData": {
"trxId": "xxxxxxxxxxx20"
},
"additionalInfo": {
"contractId": "si4390d6cb-5e9f-41fb-bfa3-51f6e7c9e4b4",
"channel": "BSI"
}
}

List Response Codes

Response CodeResponse MessageDescription
2003100Success
4003100Bad RequestKegagalan request umum, termasuk kegagalan saat memproses pesan
4003101Invalid field format { field name }
4003102Invalid mandatory field {field name}
4013100Invalid signatureX-Signature salah
4043101Transaction not foundtrxId dan contractId tidak ditemukan
4043116Partner not foundX-Partner-ID tidak terdaftar
4093100Cannot use same X-EXTERNAL-ID in same dayX-External-ID sudah pernah digunakan di hari yang sama
4093101Duplicate trxIdtrxId sudah pernah digunakan
5003100General ErrorKesalahan umum
5003101Internal Server ErrorKegagalan internal server yang tidak dikenal. Silakan coba prosesnya kembali
5003102reqbill not foundcontractId tidak ditemukan

Handle Payment Callback

Setelah customer melakukan pembayaran, Winpay akan mengirimkan callback ke merchant untuk memberitahukan status pembayaran. Merchant harus mengimplementasikan service untuk menerima callback dari Winpay.

Kebijakan Retries

Kami akan mengirimkan callback ke merchant 3x sampai merchant meresponse dengan response yang diharapkan. Namun ketika percobaan callback pertama sudah sesuai maka kami tidak akan mengirimkan callback lagi.

Callback Info

POST{yoururl}/v1.0/transfer-va/paymentService Code: 25

Layanan callback pembayaran yang di-request oleh sistem Winpay ke server Merchant.

Struktur Header

HeaderValueDeskripsi
Content-Typeapplication/json
X-Timestamp2023-08-24T17:07:05+07:00ISO8601 String
X-Partner-ID{partnerId}
X-Signature{signature}
X-External-ID{externalId}
Channel-ID{channelId}

Callback Payload

ParameterTipe DataDeskripsi
partnerServiceIdStringKode BIN dari bank
customerNoStringNomor Customer
virtualAccountNoStringNomor Virtual Account
virtualAccountNameStringNama Virtual Account
trxIdStringNomor transaksi merchant
paymentRequestIdStringNomor transaksi pembayaran
PaidAmountObjectTotal nominal transaksi
valueStringNilai transaksi yang dibayar oleh customer
currencyStringKode mata uang
trxDateTimeStringTanggal transaksi
referenceNoStringNomor referensi pembayaran
additionalInfoObjectInformasi tambahan
channelStringKode channel
contractIdStringReferensi transaksi yang dihasilkan oleh Winpay
{
"partnerServiceId": " 22691",
"customerNo": "41693903614",
"virtualAccountNo": " 2269141693903614",
"virtualAccountName": "Bayar 2269141693903614",
"trxId": "INV-000000023212x2224",
"paymentRequestId": "88889123",
"paidAmount": {
"value": "10000",
"currency": "IDR"
},
"trxDateTime": "2023-09-05T22:47:00+07:00",
"referenceNo": 36238,
"additionalInfo": {
"channel": "CIMB",
"contractId": "ci71a51730-2373-455f-b538-3f9912fefb73"
}
}

Expected Response

{
"responseCode": "2002500",
"responseMessage": "Successful"
}