Skip to content

Virtual Account

Virtual Account

Siklus hidup VA lengkap: manajemen (create/update/inquire/delete) dan pemanggilan sisi transaksi (inquiry, payment, status, varian intrabank, report).

resp, err := transfercredit.CreateVA(ctx, transport, hb, transfercredit.CreateVARequest{
	VirtualAccountName: "Jane Doe",
	TrxID: "...",
})
if err != nil {
	// errors.Is(err, snap.ErrBadRequest), snap.ErrUnauthorized, etc.
}

CreateVA

Memanggil endpoint SNAP VA - Create VA (Service Code 27, path …/{version}/transfer-va/create-va). hb harus sudah diisi semua field yang dibutuhkan snap.HeaderBuilder kecuali Body — CreateVA yang mengisinya sendiri agar byte yang sama persis dipakai untuk signing maupun request di wire.

Tidak idempoten dan tidak di-retry otomatis oleh package ini. Kalau me-retry request yang gagal/timeout, pakai X-EXTERNAL-ID yang sama — server mendeteksi duplikat lewat header ini, jadi ID baru berisiko membuat VA duplikat.

func CreateVA(ctx context.Context, t *snap.Transport, hb snap.HeaderBuilder, req CreateVARequest) (CreateVAResponse, error)

Request — CreateVARequest

VirtualAccountName dan TrxID wajib diisi; tidak seperti endpoint Virtual Account lainnya, identity triple (PartnerServiceID, CustomerNo, VirtualAccountNo) di sini Opsional.

FieldTypePresence
partnerServiceIdstringOpsional
customerNostringOpsional
virtualAccountNostringOpsional
virtualAccountNamestringWajib
trxIdstringWajib
totalAmount*snap.MoneyOpsional
billDetails[]BillDetailOpsional
freeTexts[]LocalizedTextOpsional
virtualAccountTrxTypestringOpsional
feeAmount*snap.MoneyOpsional
expiredDatestringOpsional
additionalInfojson.RawMessageOpsional
BillDetail fields

Satu entri dalam array billDetails[] (maksimal 24 entri) yang dipakai di seluruh kelompok Virtual Account. billReferenceNo bertipe json.RawMessage karena standarnya mendokumentasikan field ini sebagai Numeric tapi sebagian issuer mengirimnya sebagai angka JSON polos — kalau Anda mengisinya sendiri (mis. di CreateVARequest), berikan nilai JSON yang lengkap seperti json.RawMessage(\“BILLREF1”`)ataujson.RawMessage(`123`)`, bukan string Go biasa.

FieldTypePresence
billCodestringOpsional
billNostringOpsional
billNamestringOpsional
billShortNamestringOpsional
billDescription*LocalizedTextOpsional
billSubCompanystringOpsional
billAmount*snap.MoneyOpsional
additionalInfojson.RawMessageOpsional
billAmountLabelstringOpsional
billAmountValuestringOpsional
billReferenceNojson.RawMessageOpsional
statusstringOpsional
reason*LocalizedTextOpsional
LocalizedText fields

Bentuk teks dwibahasa {english, indonesia} yang dipakai bersama di seluruh sub-kelompok Virtual Account (mis. inquiryReason, paymentFlagReason, billDescription, reason per-bill, entri freeTexts[]). Kedua field bertipe String, tidak ditandai M/O di sumbernya, jadi keduanya carry omitempty.

FieldTypePresence
englishstringOpsional
indonesiastringOpsional

Response — CreateVAResponse

FieldTypePresence
responseCodestringWajib
responseMessagestringWajib
virtualAccountData*CreateVADataOpsional
CreateVAData fields

Objek virtualAccountData pada CreateVAResponse.

FieldTypePresence
partnerServiceIdstringOpsional
customerNostringOpsional
virtualAccountNostringOpsional
virtualAccountNamestringOpsional
trxIdstringOpsional
totalAmount*snap.MoneyOpsional
billDetails[]BillDetailOpsional
freeTexts[]LocalizedTextOpsional
virtualAccountTrxTypestringOpsional
feeAmount*snap.MoneyOpsional
expiredDatestringOpsional
additionalInfojson.RawMessageOpsional
BillDetail fields

Satu entri dalam array billDetails[] (maksimal 24 entri) yang dipakai di seluruh kelompok Virtual Account. billReferenceNo bertipe json.RawMessage karena standarnya mendokumentasikan field ini sebagai Numeric tapi sebagian issuer mengirimnya sebagai angka JSON polos — kalau Anda mengisinya sendiri (mis. di CreateVARequest), berikan nilai JSON yang lengkap seperti json.RawMessage(\“BILLREF1”`)ataujson.RawMessage(`123`)`, bukan string Go biasa.

FieldTypePresence
billCodestringOpsional
billNostringOpsional
billNamestringOpsional
billShortNamestringOpsional
billDescription*LocalizedTextOpsional
billSubCompanystringOpsional
billAmount*snap.MoneyOpsional
additionalInfojson.RawMessageOpsional
billAmountLabelstringOpsional
billAmountValuestringOpsional
billReferenceNojson.RawMessageOpsional
statusstringOpsional
reason*LocalizedTextOpsional
LocalizedText fields

Bentuk teks dwibahasa {english, indonesia} yang dipakai bersama di seluruh sub-kelompok Virtual Account (mis. inquiryReason, paymentFlagReason, billDescription, reason per-bill, entri freeTexts[]). Kedua field bertipe String, tidak ditandai M/O di sumbernya, jadi keduanya carry omitempty.

FieldTypePresence
englishstringOpsional
indonesiastringOpsional

UpdateVA

Memanggil endpoint SNAP VA - Update VA (Service Code 28, path …/{version}/transfer-va/update-va, HTTP PUT). hb harus sudah diisi semua field yang dibutuhkan snap.HeaderBuilder kecuali Method dan BodyUpdateVA yang mengisinya sendiri: Method diisi PUT (method-nya tetap, tidak bisa diubah pemanggil) dan Body diisi agar byte yang sama persis dipakai untuk signing maupun request di wire.

Tidak idempoten dan tidak di-retry otomatis oleh package ini. Kalau me-retry request yang gagal/timeout, pakai X-EXTERNAL-ID yang sama — server mendeteksi duplikat lewat header ini.

func UpdateVA(ctx context.Context, t *snap.Transport, hb snap.HeaderBuilder, req UpdateVARequest) (UpdateVAResponse, error)

Request — UpdateVARequest

PartnerServiceID, CustomerNo, VirtualAccountNo, VirtualAccountName, dan TrxID wajib diisi — tidak seperti Create VA, identity triple di sini Wajib.

FieldTypePresence
partnerServiceIdstringWajib
customerNostringWajib
virtualAccountNostringWajib
virtualAccountNamestringWajib
trxIdstringWajib
totalAmount*snap.MoneyOpsional
billDetails[]BillDetailOpsional
freeTexts[]LocalizedTextOpsional
virtualAccountTrxTypestringOpsional
feeAmount*snap.MoneyOpsional
expiredDatestringOpsional
additionalInfojson.RawMessageOpsional
BillDetail fields

Satu entri dalam array billDetails[] (maksimal 24 entri) yang dipakai di seluruh kelompok Virtual Account. billReferenceNo bertipe json.RawMessage karena standarnya mendokumentasikan field ini sebagai Numeric tapi sebagian issuer mengirimnya sebagai angka JSON polos — kalau Anda mengisinya sendiri (mis. di CreateVARequest), berikan nilai JSON yang lengkap seperti json.RawMessage(\“BILLREF1”`)ataujson.RawMessage(`123`)`, bukan string Go biasa.

FieldTypePresence
billCodestringOpsional
billNostringOpsional
billNamestringOpsional
billShortNamestringOpsional
billDescription*LocalizedTextOpsional
billSubCompanystringOpsional
billAmount*snap.MoneyOpsional
additionalInfojson.RawMessageOpsional
billAmountLabelstringOpsional
billAmountValuestringOpsional
billReferenceNojson.RawMessageOpsional
statusstringOpsional
reason*LocalizedTextOpsional
LocalizedText fields

Bentuk teks dwibahasa {english, indonesia} yang dipakai bersama di seluruh sub-kelompok Virtual Account (mis. inquiryReason, paymentFlagReason, billDescription, reason per-bill, entri freeTexts[]). Kedua field bertipe String, tidak ditandai M/O di sumbernya, jadi keduanya carry omitempty.

FieldTypePresence
englishstringOpsional
indonesiastringOpsional

Response — UpdateVAResponse

FieldTypePresence
responseCodestringWajib
responseMessagestringWajib
virtualAccountData*UpdateVADataOpsional
UpdateVAData fields

Objek virtualAccountData pada UpdateVAResponse — field data Create VA ditambah LastUpdateDate dan PaymentDate.

FieldTypePresence
partnerServiceIdstringOpsional
customerNostringOpsional
virtualAccountNostringOpsional
virtualAccountNamestringOpsional
trxIdstringOpsional
totalAmount*snap.MoneyOpsional
billDetails[]BillDetailOpsional
freeTexts[]LocalizedTextOpsional
virtualAccountTrxTypestringOpsional
feeAmount*snap.MoneyOpsional
expiredDatestringOpsional
lastUpdateDatestringOpsional
paymentDatestringOpsional
additionalInfojson.RawMessageOpsional
BillDetail fields

Satu entri dalam array billDetails[] (maksimal 24 entri) yang dipakai di seluruh kelompok Virtual Account. billReferenceNo bertipe json.RawMessage karena standarnya mendokumentasikan field ini sebagai Numeric tapi sebagian issuer mengirimnya sebagai angka JSON polos — kalau Anda mengisinya sendiri (mis. di CreateVARequest), berikan nilai JSON yang lengkap seperti json.RawMessage(\“BILLREF1”`)ataujson.RawMessage(`123`)`, bukan string Go biasa.

FieldTypePresence
billCodestringOpsional
billNostringOpsional
billNamestringOpsional
billShortNamestringOpsional
billDescription*LocalizedTextOpsional
billSubCompanystringOpsional
billAmount*snap.MoneyOpsional
additionalInfojson.RawMessageOpsional
billAmountLabelstringOpsional
billAmountValuestringOpsional
billReferenceNojson.RawMessageOpsional
statusstringOpsional
reason*LocalizedTextOpsional
LocalizedText fields

Bentuk teks dwibahasa {english, indonesia} yang dipakai bersama di seluruh sub-kelompok Virtual Account (mis. inquiryReason, paymentFlagReason, billDescription, reason per-bill, entri freeTexts[]). Kedua field bertipe String, tidak ditandai M/O di sumbernya, jadi keduanya carry omitempty.

FieldTypePresence
englishstringOpsional
indonesiastringOpsional

UpdateStatusVA

Memanggil endpoint SNAP VA - Update Status VA (Service Code 29, path …/{version}/transfer-va/update-status, HTTP PUT). hb harus sudah diisi semua field yang dibutuhkan snap.HeaderBuilder kecuali Method dan BodyUpdateStatusVA yang mengisinya sendiri: Method diisi PUT (method-nya tetap, tidak bisa diubah pemanggil) dan Body diisi agar byte yang sama persis dipakai untuk signing maupun request di wire.

Tidak idempoten dan tidak di-retry otomatis oleh package ini. Kalau me-retry request yang gagal/timeout, pakai X-EXTERNAL-ID yang sama — server mendeteksi duplikat lewat header ini.

func UpdateStatusVA(ctx context.Context, t *snap.Transport, hb snap.HeaderBuilder, req UpdateStatusVARequest) (UpdateStatusVAResponse, error)

Request — UpdateStatusVARequest

PartnerServiceID, CustomerNo, VirtualAccountNo, TrxID, dan PaidStatus wajib diisi. Nilai PaidStatus adalah "Y"/"N".

FieldTypePresence
partnerServiceIdstringWajib
customerNostringWajib
virtualAccountNostringWajib
trxIdstringWajib
paidStatusstringWajib
additionalInfojson.RawMessageOpsional

Response — UpdateStatusVAResponse

FieldTypePresence
responseCodestringWajib
responseMessagestringWajib
virtualAccountData*UpdateStatusVADataOpsional
UpdateStatusVAData fields

Objek virtualAccountData pada UpdateStatusVAResponse — himpunan field yang sama dengan UpdateVAData, hanya beda nama tipe.

FieldTypePresence
partnerServiceIdstringOpsional
customerNostringOpsional
virtualAccountNostringOpsional
virtualAccountNamestringOpsional
trxIdstringOpsional
totalAmount*snap.MoneyOpsional
billDetails[]BillDetailOpsional
freeTexts[]LocalizedTextOpsional
virtualAccountTrxTypestringOpsional
feeAmount*snap.MoneyOpsional
expiredDatestringOpsional
lastUpdateDatestringOpsional
paymentDatestringOpsional
additionalInfojson.RawMessageOpsional
BillDetail fields

Satu entri dalam array billDetails[] (maksimal 24 entri) yang dipakai di seluruh kelompok Virtual Account. billReferenceNo bertipe json.RawMessage karena standarnya mendokumentasikan field ini sebagai Numeric tapi sebagian issuer mengirimnya sebagai angka JSON polos — kalau Anda mengisinya sendiri (mis. di CreateVARequest), berikan nilai JSON yang lengkap seperti json.RawMessage(\“BILLREF1”`)ataujson.RawMessage(`123`)`, bukan string Go biasa.

FieldTypePresence
billCodestringOpsional
billNostringOpsional
billNamestringOpsional
billShortNamestringOpsional
billDescription*LocalizedTextOpsional
billSubCompanystringOpsional
billAmount*snap.MoneyOpsional
additionalInfojson.RawMessageOpsional
billAmountLabelstringOpsional
billAmountValuestringOpsional
billReferenceNojson.RawMessageOpsional
statusstringOpsional
reason*LocalizedTextOpsional
LocalizedText fields

Bentuk teks dwibahasa {english, indonesia} yang dipakai bersama di seluruh sub-kelompok Virtual Account (mis. inquiryReason, paymentFlagReason, billDescription, reason per-bill, entri freeTexts[]). Kedua field bertipe String, tidak ditandai M/O di sumbernya, jadi keduanya carry omitempty.

FieldTypePresence
englishstringOpsional
indonesiastringOpsional

InquiryVA

Memanggil endpoint SNAP VA - Inquiry VA (Service Code 30, path …/{version}/transfer-va/inquiry-va). hb harus sudah diisi semua field yang dibutuhkan snap.HeaderBuilder kecuali Body — InquiryVA yang mengisinya sendiri agar byte yang sama persis dipakai untuk signing maupun request di wire.

func InquiryVA(ctx context.Context, t *snap.Transport, hb snap.HeaderBuilder, req InquiryVARequest) (InquiryVAResponse, error)

Request — InquiryVARequest

PartnerServiceID, CustomerNo, VirtualAccountNo, dan TrxID wajib diisi.

FieldTypePresence
partnerServiceIdstringWajib
customerNostringWajib
virtualAccountNostringWajib
trxIdstringWajib
additionalInfojson.RawMessageOpsional

Response — InquiryVAResponse

FieldTypePresence
responseCodestringWajib
responseMessagestringWajib
virtualAccountData*InquiryVADataOpsional
InquiryVAData fields

Objek virtualAccountData pada InquiryVAResponse — himpunan field yang sama dengan UpdateVAData (bentuknya sama seperti response Update VA), hanya beda nama tipe.

FieldTypePresence
partnerServiceIdstringOpsional
customerNostringOpsional
virtualAccountNostringOpsional
virtualAccountNamestringOpsional
trxIdstringOpsional
totalAmount*snap.MoneyOpsional
billDetails[]BillDetailOpsional
freeTexts[]LocalizedTextOpsional
virtualAccountTrxTypestringOpsional
feeAmount*snap.MoneyOpsional
expiredDatestringOpsional
lastUpdateDatestringOpsional
paymentDatestringOpsional
additionalInfojson.RawMessageOpsional
BillDetail fields

Satu entri dalam array billDetails[] (maksimal 24 entri) yang dipakai di seluruh kelompok Virtual Account. billReferenceNo bertipe json.RawMessage karena standarnya mendokumentasikan field ini sebagai Numeric tapi sebagian issuer mengirimnya sebagai angka JSON polos — kalau Anda mengisinya sendiri (mis. di CreateVARequest), berikan nilai JSON yang lengkap seperti json.RawMessage(\“BILLREF1”`)ataujson.RawMessage(`123`)`, bukan string Go biasa.

FieldTypePresence
billCodestringOpsional
billNostringOpsional
billNamestringOpsional
billShortNamestringOpsional
billDescription*LocalizedTextOpsional
billSubCompanystringOpsional
billAmount*snap.MoneyOpsional
additionalInfojson.RawMessageOpsional
billAmountLabelstringOpsional
billAmountValuestringOpsional
billReferenceNojson.RawMessageOpsional
statusstringOpsional
reason*LocalizedTextOpsional
LocalizedText fields

Bentuk teks dwibahasa {english, indonesia} yang dipakai bersama di seluruh sub-kelompok Virtual Account (mis. inquiryReason, paymentFlagReason, billDescription, reason per-bill, entri freeTexts[]). Kedua field bertipe String, tidak ditandai M/O di sumbernya, jadi keduanya carry omitempty.

FieldTypePresence
englishstringOpsional
indonesiastringOpsional

DeleteVA

Memanggil endpoint SNAP VA - Delete VA (Service Code 31, path …/{version}/transfer-va/delete-va, HTTP DELETE). hb harus sudah diisi semua field yang dibutuhkan snap.HeaderBuilder kecuali Method dan BodyDeleteVA yang mengisinya sendiri: Method diisi DELETE (method-nya tetap, tidak bisa diubah pemanggil) dan Body diisi karena endpoint DELETE ini tetap mengirim body JSON, bukan lewat path parameter — byte yang sama persis dipakai untuk signing maupun request di wire.

Tidak idempoten dan tidak di-retry otomatis oleh package ini. Kalau me-retry request yang gagal/timeout, pakai X-EXTERNAL-ID yang sama — server mendeteksi duplikat lewat header ini.

func DeleteVA(ctx context.Context, t *snap.Transport, hb snap.HeaderBuilder, req DeleteVARequest) (DeleteVAResponse, error)

Request — DeleteVARequest

PartnerServiceID, CustomerNo, dan VirtualAccountNo wajib diisi; TrxID Opsional.

FieldTypePresence
partnerServiceIdstringWajib
customerNostringWajib
virtualAccountNostringWajib
trxIdstringOpsional
additionalInfojson.RawMessageOpsional

Response — DeleteVAResponse

FieldTypePresence
responseCodestringWajib
responseMessagestringWajib
virtualAccountData*DeleteVADataOpsional
DeleteVAData fields

Objek virtualAccountData pada DeleteVAResponse — bentuknya lebih kecil dibanding data object endpoint manajemen VA lainnya.

FieldTypePresence
partnerServiceIdstringOpsional
customerNostringOpsional
virtualAccountNostringOpsional
trxIdstringOpsional
additionalInfojson.RawMessageOpsional

VAInquiry

Memanggil endpoint SNAP VA - VA Inquiry (Service Code 24, path …/{version}/transfer-va/inquiry). hb harus sudah diisi semua field yang dibutuhkan snap.HeaderBuilder kecuali Body — VAInquiry yang mengisinya sendiri agar byte yang sama persis dipakai untuk signing maupun request di wire.

func VAInquiry(ctx context.Context, t *snap.Transport, hb snap.HeaderBuilder, req VAInquiryRequest) (VAInquiryResponse, error)

Request — VAInquiryRequest

partnerServiceId, customerNo, virtualAccountNo, dan inquiryRequestId Wajib. customerNo bertipe json.RawMessage karena contoh resmi endpoint sejenis menampilkannya sebagai angka JSON polos, bukan string berkutip — berikan nilai JSON lengkap (mis. json.RawMessage(\“98765”`)ataujson.RawMessage(`98765`)`), bukan string Go biasa.

FieldTypePresence
partnerServiceIdstringWajib
customerNojson.RawMessageWajib
virtualAccountNostringWajib
trxDateInitstringOpsional
channelCodejson.RawMessageOpsional
languagestringOpsional
hashedSourceAccountNostringOpsional
sourceBankCodestringOpsional
passAppstringOpsional
inquiryRequestIdstringWajib
additionalInfojson.RawMessageOpsional

Response — VAInquiryResponse

FieldTypePresence
responseCodestringWajib
responseMessagestringWajib
virtualAccountData*VAInquiryDataOpsional
VAInquiryData fields

Objek virtualAccountData pada VAInquiryResponse. Field selain identity triple tidak berlabel M/O di sumbernya, jadi semuanya Opsional (omitempty); InquiryReason, TotalAmount, dan FeeAmount berupa pointer karena omitempty tidak berlaku pada nilai struct non-pointer.

FieldTypePresence
partnerServiceIdstringOpsional
customerNojson.RawMessageOpsional
virtualAccountNostringOpsional
inquiryStatusstringOpsional
inquiryReason*LocalizedTextOpsional
virtualAccountNamestringOpsional
virtualAccountEmailstringOpsional
virtualAccountPhonestringOpsional
inquiryRequestIdstringOpsional
totalAmount*snap.MoneyOpsional
subCompanystringOpsional
billDetails[]BillDetailOpsional
freeTexts[]LocalizedTextOpsional
virtualAccountTrxTypestringOpsional
feeAmount*snap.MoneyOpsional
additionalInfojson.RawMessageOpsional
LocalizedText fields

Bentuk teks dwibahasa {english, indonesia} yang dipakai bersama di seluruh sub-kelompok Virtual Account (mis. inquiryReason, paymentFlagReason, billDescription, reason per-bill, entri freeTexts[]). Kedua field bertipe String, tidak ditandai M/O di sumbernya, jadi keduanya carry omitempty.

FieldTypePresence
englishstringOpsional
indonesiastringOpsional
BillDetail fields

Satu entri dalam array billDetails[] (maksimal 24 entri) yang dipakai di seluruh kelompok Virtual Account. billReferenceNo bertipe json.RawMessage karena standarnya mendokumentasikan field ini sebagai Numeric tapi sebagian issuer mengirimnya sebagai angka JSON polos — kalau Anda mengisinya sendiri (mis. di CreateVARequest), berikan nilai JSON yang lengkap seperti json.RawMessage(\“BILLREF1”`)ataujson.RawMessage(`123`)`, bukan string Go biasa.

FieldTypePresence
billCodestringOpsional
billNostringOpsional
billNamestringOpsional
billShortNamestringOpsional
billDescription*LocalizedTextOpsional
billSubCompanystringOpsional
billAmount*snap.MoneyOpsional
additionalInfojson.RawMessageOpsional
billAmountLabelstringOpsional
billAmountValuestringOpsional
billReferenceNojson.RawMessageOpsional
statusstringOpsional
reason*LocalizedTextOpsional

VAPayment

Memanggil endpoint SNAP VA - VA Payment (Service Code 25, path …/{version}/transfer-va/payment, HTTP POST — tanpa override method). hb harus sudah diisi semua field yang dibutuhkan snap.HeaderBuilder kecuali Body — VAPayment yang mengisinya sendiri agar byte yang sama persis dipakai untuk signing maupun request di wire.

Tidak idempoten dan tidak di-retry otomatis oleh package ini. Kalau me-retry request yang gagal/timeout, pakai X-EXTERNAL-ID yang sama — server mendeteksi duplikat lewat header ini.

func VAPayment(ctx context.Context, t *snap.Transport, hb snap.HeaderBuilder, req VAPaymentRequest) (VAPaymentResponse, error)

Request — VAPaymentRequest

partnerServiceId, customerNo, virtualAccountNo, paymentRequestId, dan paidAmount Wajib. trxId Kondisional — wajib diisi kalau VA-nya dibuat lewat CreateVA. customerNo, channelCode, dan paymentType bertipe json.RawMessage karena contoh resmi standarnya menampilkan ketiganya sebagai angka polos, bukan string berkutip.

FieldTypePresence
partnerServiceIdstringWajib
customerNojson.RawMessageWajib
virtualAccountNostringWajib
trxIdstringOpsional
paymentRequestIdstringWajib
channelCodejson.RawMessageOpsional
hashedSourceAccountNostringOpsional
sourceBankCodestringOpsional
paidAmountsnap.MoneyWajib
cumulativePaymentAmount*snap.MoneyOpsional
paidBillsstringOpsional
totalAmount*snap.MoneyOpsional
trxDateTimestringOpsional
referenceNostringOpsional
journalNumstringOpsional
paymentTypejson.RawMessageOpsional
flagAdvisestringOpsional
subCompanystringOpsional
billDetails[]BillDetailOpsional
freeTexts[]LocalizedTextOpsional
additionalInfojson.RawMessageOpsional
BillDetail fields

Satu entri dalam array billDetails[] (maksimal 24 entri) yang dipakai di seluruh kelompok Virtual Account. billReferenceNo bertipe json.RawMessage karena standarnya mendokumentasikan field ini sebagai Numeric tapi sebagian issuer mengirimnya sebagai angka JSON polos — kalau Anda mengisinya sendiri (mis. di CreateVARequest), berikan nilai JSON yang lengkap seperti json.RawMessage(\“BILLREF1”`)ataujson.RawMessage(`123`)`, bukan string Go biasa.

FieldTypePresence
billCodestringOpsional
billNostringOpsional
billNamestringOpsional
billShortNamestringOpsional
billDescription*LocalizedTextOpsional
billSubCompanystringOpsional
billAmount*snap.MoneyOpsional
additionalInfojson.RawMessageOpsional
billAmountLabelstringOpsional
billAmountValuestringOpsional
billReferenceNojson.RawMessageOpsional
statusstringOpsional
reason*LocalizedTextOpsional
LocalizedText fields

Bentuk teks dwibahasa {english, indonesia} yang dipakai bersama di seluruh sub-kelompok Virtual Account (mis. inquiryReason, paymentFlagReason, billDescription, reason per-bill, entri freeTexts[]). Kedua field bertipe String, tidak ditandai M/O di sumbernya, jadi keduanya carry omitempty.

FieldTypePresence
englishstringOpsional
indonesiastringOpsional

Response — VAPaymentResponse

FieldTypePresence
responseCodestringWajib
responseMessagestringWajib
virtualAccountData*VAPaymentDataOpsional
VAPaymentData fields

Objek virtualAccountData pada VAPaymentResponse — mencerminkan field request-nya ditambah paymentFlagReason dan paymentFlagStatus.

FieldTypePresence
partnerServiceIdstringOpsional
customerNojson.RawMessageOpsional
virtualAccountNostringOpsional
trxIdstringOpsional
paymentRequestIdstringOpsional
channelCodejson.RawMessageOpsional
hashedSourceAccountNostringOpsional
sourceBankCodestringOpsional
paidAmount*snap.MoneyOpsional
cumulativePaymentAmount*snap.MoneyOpsional
paidBillsstringOpsional
totalAmount*snap.MoneyOpsional
trxDateTimestringOpsional
referenceNostringOpsional
journalNumstringOpsional
paymentTypejson.RawMessageOpsional
flagAdvisestringOpsional
subCompanystringOpsional
billDetails[]BillDetailOpsional
freeTexts[]LocalizedTextOpsional
paymentFlagReason*LocalizedTextOpsional
paymentFlagStatusstringOpsional
additionalInfojson.RawMessageOpsional
BillDetail fields

Satu entri dalam array billDetails[] (maksimal 24 entri) yang dipakai di seluruh kelompok Virtual Account. billReferenceNo bertipe json.RawMessage karena standarnya mendokumentasikan field ini sebagai Numeric tapi sebagian issuer mengirimnya sebagai angka JSON polos — kalau Anda mengisinya sendiri (mis. di CreateVARequest), berikan nilai JSON yang lengkap seperti json.RawMessage(\“BILLREF1”`)ataujson.RawMessage(`123`)`, bukan string Go biasa.

FieldTypePresence
billCodestringOpsional
billNostringOpsional
billNamestringOpsional
billShortNamestringOpsional
billDescription*LocalizedTextOpsional
billSubCompanystringOpsional
billAmount*snap.MoneyOpsional
additionalInfojson.RawMessageOpsional
billAmountLabelstringOpsional
billAmountValuestringOpsional
billReferenceNojson.RawMessageOpsional
statusstringOpsional
reason*LocalizedTextOpsional
LocalizedText fields

Bentuk teks dwibahasa {english, indonesia} yang dipakai bersama di seluruh sub-kelompok Virtual Account (mis. inquiryReason, paymentFlagReason, billDescription, reason per-bill, entri freeTexts[]). Kedua field bertipe String, tidak ditandai M/O di sumbernya, jadi keduanya carry omitempty.

FieldTypePresence
englishstringOpsional
indonesiastringOpsional

VAInquiryStatus

Memanggil endpoint SNAP VA - VA Inquiry Status (Service Code 26, path …/{version}/transfer-va/status). hb harus sudah diisi semua field yang dibutuhkan snap.HeaderBuilder kecuali Body — VAInquiryStatus yang mengisinya sendiri agar byte yang sama persis dipakai untuk signing maupun request di wire.

func VAInquiryStatus(ctx context.Context, t *snap.Transport, hb snap.HeaderBuilder, req VAInquiryStatusRequest) (VAInquiryStatusResponse, error)

Request — VAInquiryStatusRequest

partnerServiceId, customerNo, dan virtualAccountNo (identity triple) Wajib; inquiryRequestId dan paymentRequestId Opsional/Kondisional. Package ini selalu men-decode response sebagai satu objek tunggal, sesuai deklarasi tipe standarnya.

FieldTypePresence
partnerServiceIdstringWajib
customerNojson.RawMessageWajib
virtualAccountNostringWajib
inquiryRequestIdstringOpsional
paymentRequestIdstringOpsional
additionalInfojson.RawMessageOpsional

Response — VAInquiryStatusResponse

FieldTypePresence
responseCodestringWajib
responseMessagestringWajib
virtualAccountData*VAInquiryStatusDataOpsional
VAInquiryStatusData fields

Objek virtualAccountData pada VAInquiryStatusResponse — bentuknya sama dengan VAPaymentData ditambah transactionDate, disimpan sebagai tipe sendiri karena Service Code-nya berbeda.

FieldTypePresence
partnerServiceIdstringOpsional
customerNojson.RawMessageOpsional
virtualAccountNostringOpsional
trxIdstringOpsional
paymentRequestIdstringOpsional
channelCodejson.RawMessageOpsional
hashedSourceAccountNostringOpsional
sourceBankCodestringOpsional
paidAmount*snap.MoneyOpsional
cumulativePaymentAmount*snap.MoneyOpsional
paidBillsstringOpsional
totalAmount*snap.MoneyOpsional
trxDateTimestringOpsional
referenceNostringOpsional
journalNumstringOpsional
paymentTypejson.RawMessageOpsional
flagAdvisestringOpsional
subCompanystringOpsional
billDetails[]BillDetailOpsional
freeTexts[]LocalizedTextOpsional
paymentFlagReason*LocalizedTextOpsional
paymentFlagStatusstringOpsional
additionalInfojson.RawMessageOpsional
transactionDatestringOpsional
BillDetail fields

Satu entri dalam array billDetails[] (maksimal 24 entri) yang dipakai di seluruh kelompok Virtual Account. billReferenceNo bertipe json.RawMessage karena standarnya mendokumentasikan field ini sebagai Numeric tapi sebagian issuer mengirimnya sebagai angka JSON polos — kalau Anda mengisinya sendiri (mis. di CreateVARequest), berikan nilai JSON yang lengkap seperti json.RawMessage(\“BILLREF1”`)ataujson.RawMessage(`123`)`, bukan string Go biasa.

FieldTypePresence
billCodestringOpsional
billNostringOpsional
billNamestringOpsional
billShortNamestringOpsional
billDescription*LocalizedTextOpsional
billSubCompanystringOpsional
billAmount*snap.MoneyOpsional
additionalInfojson.RawMessageOpsional
billAmountLabelstringOpsional
billAmountValuestringOpsional
billReferenceNojson.RawMessageOpsional
statusstringOpsional
reason*LocalizedTextOpsional
LocalizedText fields

Bentuk teks dwibahasa {english, indonesia} yang dipakai bersama di seluruh sub-kelompok Virtual Account (mis. inquiryReason, paymentFlagReason, billDescription, reason per-bill, entri freeTexts[]). Kedua field bertipe String, tidak ditandai M/O di sumbernya, jadi keduanya carry omitempty.

FieldTypePresence
englishstringOpsional
indonesiastringOpsional

VAInquiryPaymentIntrabank

Memanggil endpoint SNAP VA - Inquiry Payment Intrabank (Service Code 32, path …/{version}/transfer-va/inquiry-intrabank). hb harus sudah diisi semua field yang dibutuhkan snap.HeaderBuilder kecuali Body — VAInquiryPaymentIntrabank yang mengisinya sendiri agar byte yang sama persis dipakai untuk signing maupun request di wire.

func VAInquiryPaymentIntrabank(ctx context.Context, t *snap.Transport, hb snap.HeaderBuilder, req VAInquiryPaymentIntrabankRequest) (VAInquiryPaymentIntrabankResponse, error)

Request — VAInquiryPaymentIntrabankRequest

partnerServiceId, customerNo, dan virtualAccountNo (identity triple) Wajib. customerNo bertipe json.RawMessage karena contoh resmi endpoint ini menampilkannya sebagai angka JSON polos.

FieldTypePresence
partnerServiceIdstringWajib
customerNojson.RawMessageWajib
virtualAccountNostringWajib
partnerReferenceNostringOpsional
sourceAccountNostringOpsional
sourceAccountTypestringOpsional
additionalInfojson.RawMessageOpsional

Response — VAInquiryPaymentIntrabankResponse

FieldTypePresence
responseCodestringWajib
responseMessagestringWajib
virtualAccountdata*VAInquiryPaymentIntrabankDataOpsional
VAInquiryPaymentIntrabankData fields

Objek virtualAccountdata (huruf “d” kecil — sengaja mengikuti wire key standarnya, tidak seperti kebanyakan endpoint VA lain yang pakai virtualAccountData) pada VAInquiryPaymentIntrabankResponse.

FieldTypePresence
partnerServiceIdstringOpsional
customerNojson.RawMessageOpsional
virtualAccountNostringOpsional
partnerReferenceNostringOpsional
sourceAccountNostringOpsional
sourceAccountTypestringOpsional
productNamestringOpsional
billAmountLabelstringOpsional
billAmountValuestringOpsional
additionalInfojson.RawMessageOpsional

VAPaymentIntrabank

Memanggil endpoint SNAP VA - Payment Intrabank (Service Code 33, path …/{version}/transfer-va/payment-intrabank, HTTP POST — tanpa override method). hb harus sudah diisi semua field yang dibutuhkan snap.HeaderBuilder kecuali Body — VAPaymentIntrabank yang mengisinya sendiri agar byte yang sama persis dipakai untuk signing maupun request di wire.

Tidak idempoten dan tidak di-retry otomatis oleh package ini. Kalau me-retry request yang gagal/timeout, pakai X-EXTERNAL-ID yang sama — server mendeteksi duplikat lewat header ini.

func VAPaymentIntrabank(ctx context.Context, t *snap.Transport, hb snap.HeaderBuilder, req VAPaymentIntrabankRequest) (VAPaymentIntrabankResponse, error)

Request — VAPaymentIntrabankRequest

partnerServiceId, customerNo, virtualAccountNo, partnerReferenceNo, dan paidAmount Wajib. customerNo dan referenceNo bertipe json.RawMessage karena contoh resmi standarnya menampilkan keduanya sebagai angka polos, meski referenceNo muncul berkutip di response. paymentStatus berupa string status bebas, bukan kode 2 digit transactionStatus seperti biasanya di package ini.

FieldTypePresence
partnerServiceIdstringWajib
customerNojson.RawMessageWajib
virtualAccountNostringWajib
sourceAccountNostringOpsional
sourceAccountTypestringOpsional
inquiryRequestIdstringOpsional
partnerReferenceNostringWajib
paidAmountsnap.MoneyWajib
cumulativePaymentAmount*snap.MoneyOpsional
paidBillsstringOpsional
paymentStatusstringOpsional
referenceNojson.RawMessageOpsional
additionalInfojson.RawMessageOpsional

Response — VAPaymentIntrabankResponse

FieldTypePresence
responseCodestringWajib
responseMessagestringWajib
virtualAccountdata*VAPaymentIntrabankDataOpsional
VAPaymentIntrabankData fields

Objek virtualAccountdata (huruf “d” kecil) pada VAPaymentIntrabankResponse — mencerminkan field request-nya sendiri.

FieldTypePresence
partnerServiceIdstringOpsional
customerNojson.RawMessageOpsional
virtualAccountNostringOpsional
sourceAccountNostringOpsional
sourceAccountTypestringOpsional
inquiryRequestIdstringOpsional
partnerReferenceNostringOpsional
paidAmount*snap.MoneyOpsional
cumulativePaymentAmount*snap.MoneyOpsional
paidBillsstringOpsional
paymentStatusstringOpsional
referenceNojson.RawMessageOpsional
additionalInfojson.RawMessageOpsional

VANotifyPaymentIntrabank

Memanggil endpoint SNAP VA - Notify Payment Intrabank (Service Code 34, path …/{version}/transfer-va/notify-payment-intrabank, HTTP POST — tanpa override method). hb harus sudah diisi semua field yang dibutuhkan snap.HeaderBuilder kecuali Body — VANotifyPaymentIntrabank yang mengisinya sendiri agar byte yang sama persis dipakai untuk signing maupun request di wire.

Tidak idempoten dan tidak di-retry otomatis oleh package ini. Kalau me-retry request yang gagal/timeout, pakai X-EXTERNAL-ID yang sama — server mendeteksi duplikat lewat header ini.

func VANotifyPaymentIntrabank(ctx context.Context, t *snap.Transport, hb snap.HeaderBuilder, req VANotifyPaymentIntrabankRequest) (VANotifyPaymentIntrabankResponse, error)

Request — VANotifyPaymentIntrabankRequest

Berbeda dari notifikasi RTGS/SKNBI/Interbank-Bulk, yang ini outbound — kode Anda yang memanggilnya, PJP yang menerimanya — jadi ini fungsi pemanggil biasa, bukan struct inbound-only. customerNo bertipe json.RawMessage karena contoh resmi standarnya menampilkannya sebagai angka polos.

FieldTypePresence
partnerServiceIdstringWajib
customerNojson.RawMessageWajib
virtualAccountNostringWajib
inquiryRequestIdstringOpsional
paymentRequestIdstringOpsional
partnerReferenceNostringOpsional
trxDateTimestringOpsional
paymentStatusstringOpsional
paymentFlagReason*LocalizedTextOpsional
additionalInfojson.RawMessageOpsional
LocalizedText fields

Bentuk teks dwibahasa {english, indonesia} yang dipakai bersama di seluruh sub-kelompok Virtual Account (mis. inquiryReason, paymentFlagReason, billDescription, reason per-bill, entri freeTexts[]). Kedua field bertipe String, tidak ditandai M/O di sumbernya, jadi keduanya carry omitempty.

FieldTypePresence
englishstringOpsional
indonesiastringOpsional

Response — VANotifyPaymentIntrabankResponse

FieldTypePresence
responseCodestringWajib
responseMessagestringWajib
virtualAccountdata*VANotifyPaymentIntrabankDataOpsional
VANotifyPaymentIntrabankData fields

Objek virtualAccountdata (huruf “d” kecil) pada VANotifyPaymentIntrabankResponse — mencerminkan sebagian besar field request-nya, ditambah envelope.

FieldTypePresence
partnerServiceIdstringOpsional
customerNojson.RawMessageOpsional
virtualAccountNostringOpsional
inquiryRequestIdstringOpsional
paymentRequestIdstringOpsional
partnerReferenceNostringOpsional
trxDateTimestringOpsional
paymentStatusstringOpsional
paymentFlagReason*LocalizedTextOpsional
additionalInfojson.RawMessageOpsional
LocalizedText fields

Bentuk teks dwibahasa {english, indonesia} yang dipakai bersama di seluruh sub-kelompok Virtual Account (mis. inquiryReason, paymentFlagReason, billDescription, reason per-bill, entri freeTexts[]). Kedua field bertipe String, tidak ditandai M/O di sumbernya, jadi keduanya carry omitempty.

FieldTypePresence
englishstringOpsional
indonesiastringOpsional

VAGetReport

Memanggil endpoint SNAP VA - Get Report (Service Code 35, path …/{version}/transfer-va/report). hb harus sudah diisi semua field yang dibutuhkan snap.HeaderBuilder kecuali Method dan Body: VAGetReport mengisi Method dengan POST sendiri (standarnya mendokumentasikan endpoint ini secara tidak konsisten sebagai GET maupun POST-dengan-body; package ini selalu pakai POST) dan Body, agar byte yang sama persis dipakai untuk signing maupun request di wire.

Laporan dengan rentang tanggal lebar bisa mengembalikan jumlah entri array yang tidak terbatas; transport layer bersama membatasi setiap response body sampai 10 MiB (lihat transport.go), jadi kalau menarik laporan besar sebaiknya di-page pakai rentang tanggal/waktu yang lebih sempit, bukan satu panggilan tak terbatas.

func VAGetReport(ctx context.Context, t *snap.Transport, hb snap.HeaderBuilder, req VAGetReportRequest) (VAGetReportResponse, error)

Request — VAGetReportRequest

partnerServiceId satu-satunya field Wajib; bertipe json.RawMessage di sini karena standarnya mendokumentasikan field ini sebagai Number khusus untuk endpoint ini, tidak seperti endpoint VA lain yang bertipe String.

FieldTypePresence
partnerServiceIdjson.RawMessageWajib
startDatestringOpsional
startTimestringOpsional
endDatestringOpsional
endTimestringOpsional
additionalInfojson.RawMessageOpsional

Response — VAGetReportResponse

Satu-satunya response VA di package ini yang field data-nya berupa array, bukan objek tunggal.

FieldTypePresence
responseCodestringWajib
responseMessagestringWajib
virtualAccountdata[]GetReportDataOpsional
GetReportData fields

Satu entri dalam array virtualAccountdata (huruf “d” kecil) pada VAGetReportResponse — bentuknya sama dengan VAInquiryStatusData, disimpan sebagai tipe sendiri karena Service Code-nya berbeda.

FieldTypePresence
partnerServiceIdstringOpsional
customerNojson.RawMessageOpsional
virtualAccountNostringOpsional
trxIdstringOpsional
paymentRequestIdstringOpsional
channelCodejson.RawMessageOpsional
hashedSourceAccountNostringOpsional
sourceBankCodestringOpsional
paidAmount*snap.MoneyOpsional
cumulativePaymentAmount*snap.MoneyOpsional
paidBillsstringOpsional
totalAmount*snap.MoneyOpsional
trxDateTimestringOpsional
referenceNostringOpsional
journalNumstringOpsional
paymentTypejson.RawMessageOpsional
flagAdvisestringOpsional
subCompanystringOpsional
billDetails[]BillDetailOpsional
freeTexts[]LocalizedTextOpsional
paymentFlagReason*LocalizedTextOpsional
paymentFlagStatusstringOpsional
additionalInfojson.RawMessageOpsional
transactionDatestringOpsional
BillDetail fields

Satu entri dalam array billDetails[] (maksimal 24 entri) yang dipakai di seluruh kelompok Virtual Account. billReferenceNo bertipe json.RawMessage karena standarnya mendokumentasikan field ini sebagai Numeric tapi sebagian issuer mengirimnya sebagai angka JSON polos — kalau Anda mengisinya sendiri (mis. di CreateVARequest), berikan nilai JSON yang lengkap seperti json.RawMessage(\“BILLREF1”`)ataujson.RawMessage(`123`)`, bukan string Go biasa.

FieldTypePresence
billCodestringOpsional
billNostringOpsional
billNamestringOpsional
billShortNamestringOpsional
billDescription*LocalizedTextOpsional
billSubCompanystringOpsional
billAmount*snap.MoneyOpsional
additionalInfojson.RawMessageOpsional
billAmountLabelstringOpsional
billAmountValuestringOpsional
billReferenceNojson.RawMessageOpsional
statusstringOpsional
reason*LocalizedTextOpsional
LocalizedText fields

Bentuk teks dwibahasa {english, indonesia} yang dipakai bersama di seluruh sub-kelompok Virtual Account (mis. inquiryReason, paymentFlagReason, billDescription, reason per-bill, entri freeTexts[]). Kedua field bertipe String, tidak ditandai M/O di sumbernya, jadi keduanya carry omitempty.

FieldTypePresence
englishstringOpsional
indonesiastringOpsional