Skip to content

Trigger Transfer

Trigger Transfer

Kumpulan pemanggilan inti pemindahan dana: intrabank, interbank, bulk, request-for-payment, RTGS, dan SKNBI — tiap jalur real-time-gross atau bulk punya tipe notifikasi masuknya sendiri yang harus diterima layanan Anda.

resp, err := transfercredit.InterbankTransfer(ctx, transport, hb, transfercredit.InterbankTransferRequest{
	PartnerReferenceNo: "2020102900000000000001",
	Amount: snap.Money{Value: "500000.00", Currency: "IDR"},
	BeneficiaryAccountNo: "1234567890",
	BeneficiaryAccountName: "Jane Doe",
	BeneficiaryBankCode: "...",
	SourceAccountNo: "1234567890",
	TransactionDate: "2026-09-14T10:00:00+07:00",
})
if err != nil {
	// errors.Is(err, snap.ErrBadRequest), snap.ErrUnauthorized, etc.
}

IntrabankTransfer

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

Tidak idempoten — tidak di-retry otomatis. Kalau me-retry request yang gagal/timeout, pakai X-EXTERNAL-ID yang sama; ID baru berisiko bikin transfer ganda.

func IntrabankTransfer(ctx context.Context, t *snap.Transport, hb snap.HeaderBuilder, req IntrabankTransferRequest) (IntrabankTransferResponse, error)

Request — IntrabankTransferRequest

PartnerReferenceNo, Amount, BeneficiaryAccountNo, SourceAccountNo, dan TransactionDate wajib diisi. OriginatorInfos Kondisional.

FieldTypePresence
partnerReferenceNostringWajib
amountsnap.MoneyWajib
beneficiaryAccountNostringWajib
beneficiaryEmailstringOpsional
currencystringOpsional
customerReferencestringOpsional
feeTypestringOpsional
remarkstringOpsional
sourceAccountNostringWajib
transactionDatestringWajib
originatorInfos[]TransferOriginatorInfoOpsional
additionalInfojson.RawMessageOpsional
TransferOriginatorInfo fields

Bentuk entri “originatorInfos[]” yang dipakai bersama di seluruh kelompok Trigger Transfer. Ketiga field bertipe String.

FieldTypePresence
originatorCustomerNostringWajib
originatorCustomerNamestringWajib
originatorBankCodestringWajib

Response — IntrabankTransferResponse

FieldTypePresence
responseCodestringWajib
responseMessagestringWajib
referenceNostringOpsional
partnerReferenceNostringOpsional
amount*snap.MoneyOpsional
beneficiaryAccountNostringOpsional
currencystringOpsional
customerReferencestringOpsional
sourceAccountNostringOpsional
transactionDatestringOpsional
originatorInfos[]TransferOriginatorInfoOpsional
additionalInfojson.RawMessageOpsional
TransferOriginatorInfo fields

Bentuk entri “originatorInfos[]” yang dipakai bersama di seluruh kelompok Trigger Transfer. Ketiga field bertipe String.

FieldTypePresence
originatorCustomerNostringWajib
originatorCustomerNamestringWajib
originatorBankCodestringWajib

InterbankTransfer

Memanggil endpoint SNAP Interbank Transfer (Service Code 18, path …/{version}/transfer-interbank). hb harus sudah diisi semua field yang dibutuhkan snap.HeaderBuilder kecuali Body — fungsi ini yang mengisinya sendiri agar byte yang sama persis dipakai untuk signing maupun request di wire.

Tidak idempoten — tidak di-retry otomatis. Kalau me-retry request yang gagal/timeout, pakai X-EXTERNAL-ID yang sama; ID baru berisiko bikin transfer ganda.

func InterbankTransfer(ctx context.Context, t *snap.Transport, hb snap.HeaderBuilder, req InterbankTransferRequest) (InterbankTransferResponse, error)

Request — InterbankTransferRequest

PartnerReferenceNo, Amount, BeneficiaryAccountNo, BeneficiaryAccountName, BeneficiaryBankCode, SourceAccountNo, dan TransactionDate wajib diisi. OriginatorInfos Kondisional.

FieldTypePresence
partnerReferenceNostringWajib
amountsnap.MoneyWajib
beneficiaryAccountNostringWajib
beneficiaryAccountNamestringWajib
beneficiaryAddressstringOpsional
beneficiaryBankCodestringWajib
beneficiaryBankNamestringOpsional
beneficiaryEmailstringOpsional
currencystringOpsional
customerReferencestringOpsional
feeTypestringOpsional
remarkstringOpsional
sourceAccountNostringWajib
transactionDatestringWajib
originatorInfos[]TransferOriginatorInfoOpsional
additionalInfojson.RawMessageOpsional
TransferOriginatorInfo fields

Bentuk entri “originatorInfos[]” yang dipakai bersama di seluruh kelompok Trigger Transfer. Ketiga field bertipe String.

FieldTypePresence
originatorCustomerNostringWajib
originatorCustomerNamestringWajib
originatorBankCodestringWajib

Response — InterbankTransferResponse

FieldTypePresence
responseCodestringWajib
responseMessagestringWajib
referenceNostringOpsional
partnerReferenceNostringOpsional
amount*snap.MoneyOpsional
beneficiaryAccountNostringOpsional
currencystringOpsional
customerReferencestringOpsional
sourceAccountNostringOpsional
transactionDatestringOpsional
traceNostringOpsional
originatorInfos[]TransferOriginatorInfoOpsional
additionalInfojson.RawMessageOpsional
TransferOriginatorInfo fields

Bentuk entri “originatorInfos[]” yang dipakai bersama di seluruh kelompok Trigger Transfer. Ketiga field bertipe String.

FieldTypePresence
originatorCustomerNostringWajib
originatorCustomerNamestringWajib
originatorBankCodestringWajib

InterbankBulkTransfer

Memanggil endpoint SNAP Interbank Bulk Transfer (Service Code 20, path …/{version}/transfer-interbank-bulk). hb harus sudah diisi semua field yang dibutuhkan snap.HeaderBuilder kecuali Body — fungsi ini yang mengisinya sendiri agar byte yang sama persis dipakai untuk signing maupun request di wire.

Tidak idempoten — tidak di-retry otomatis. Kalau me-retry request yang gagal/timeout, pakai X-EXTERNAL-ID yang sama; ID baru berisiko bikin bulk transfer ganda.

func InterbankBulkTransfer(ctx context.Context, t *snap.Transport, hb snap.HeaderBuilder, req InterbankBulkTransferRequest) (InterbankBulkTransferResponse, error)

Request — InterbankBulkTransferRequest

CustomerReference, SourceAccountNo, TransactionDate, dan BulkObject wajib diisi.

FieldTypePresence
partnerBulkIdstringOpsional
currencystringOpsional
customerReferencestringWajib
feeTypestringOpsional
remarkstringOpsional
sourceAccountNostringWajib
transactionDatestringWajib
bulkObject[]InterbankBulkTransferItemWajib
additionalInfojson.RawMessageOpsional
InterbankBulkTransferItem fields

Satu entri dalam array “bulkObject[]” pada request Interbank Bulk Transfer.

FieldTypePresence
partnerReferenceNostringWajib
bankCodestringWajib
beneficiaryAccountNostringWajib
beneficiaryAccountNamestringWajib
amountsnap.MoneyWajib
originatorInfos[]TransferOriginatorInfoOpsional
additionalInfojson.RawMessageOpsional
TransferOriginatorInfo fields

Bentuk entri “originatorInfos[]” yang dipakai bersama di seluruh kelompok Trigger Transfer. Ketiga field bertipe String.

FieldTypePresence
originatorCustomerNostringWajib
originatorCustomerNamestringWajib
originatorBankCodestringWajib

Response — InterbankBulkTransferResponse

FieldTypePresence
responseCodestringWajib
responseMessagestringWajib
bulkIdstringOpsional
partnerBulkIdstringOpsional
additionalInfojson.RawMessageOpsional

Interbank Bulk Transfer Notification

Hanya masuk (inbound) — package ini tidak memanggil endpoint untuk ini. Partner/switcher yang mengirim POST ke callback URL Anda; unmarshal body-nya ke InterbankBulkTransferNotificationRequest setelah diverifikasi dengan snap.ServerVerifier (lihat Verifying inbound requests), lalu balas dengan bentuk di bawah.

Diterima — InterbankBulkTransferNotificationRequest

Body callback settlement untuk API Interbank Bulk Transfer - Notification (Service Code 21, path …/{version}/transfer-interbank-bulk/notify). bulkId, partnerBulkId, dan bulkObject wajib diisi.

FieldTypePresence
bulkIdstringWajib
partnerBulkIdstringWajib
bulkObject[]InterbankBulkTransferNotificationItemWajib
InterbankBulkTransferNotificationItem fields

Satu entri dalam array “bulkObject[]” pada request Interbank Bulk Transfer - Notification — bentuk hasil settlement, berbeda dari bentuk instruksi transfer InterbankBulkTransferItem.

FieldTypePresence
partnerReferenceNostringWajib
responseCodestringWajib
responseMessagestringWajib

Handler Anda membalas dengan — InterbankBulkTransferNotificationResponse

FieldTypePresence
responseCodestringWajib
responseMessagestringWajib
bulkIdstringOpsional
partnerBulkIdstringOpsional
additionalInfojson.RawMessageOpsional

RequestForPayment

Memanggil endpoint SNAP Request for Payment (Service Code 19, path …/{version}/transfer-request-for-payment). hb harus sudah diisi semua field yang dibutuhkan snap.HeaderBuilder kecuali Body — fungsi ini yang mengisinya sendiri agar byte yang sama persis dipakai untuk signing maupun request di wire.

Tidak idempoten — tidak di-retry otomatis. Kalau me-retry request yang gagal/timeout, pakai X-EXTERNAL-ID yang sama; ID baru berisiko bikin permintaan pembayaran ganda.

func RequestForPayment(ctx context.Context, t *snap.Transport, hb snap.HeaderBuilder, req RequestForPaymentRequest) (RequestForPaymentResponse, error)

Request — RequestForPaymentRequest

PartnerReferenceNo, BankCode, BeneficiaryAccountNo, BeneficiaryAccountName, ExpiredDatetime, SourceAccountNo, dan SourceAccountName wajib diisi.

FieldTypePresence
partnerReferenceNostringWajib
bankCodestringWajib
beneficiaryAccountNostringWajib
beneficiaryAccountNamestringWajib
remarkstringOpsional
expiredDatetimestringWajib
sourceAccountNostringWajib
sourceAccountNamestringWajib
currencystringOpsional
amount*snap.MoneyOpsional
feeTypestringOpsional
additionalInfojson.RawMessageOpsional

Response — RequestForPaymentResponse

FieldTypePresence
responseCodestringWajib
responseMessagestringWajib
referenceNostringOpsional
partnerReferenceNostringOpsional
additionalInfojson.RawMessageOpsional

RTGSTransfer

Memanggil endpoint SNAP Transfer RTGS (Service Code 22, path …/{version}/transfer-rtgs). hb harus sudah diisi semua field yang dibutuhkan snap.HeaderBuilder kecuali Body — fungsi ini yang mengisinya sendiri agar byte yang sama persis dipakai untuk signing maupun request di wire.

Tidak idempoten — tidak di-retry otomatis. Kalau me-retry request yang gagal/timeout, pakai X-EXTERNAL-ID yang sama; ID baru berisiko bikin transfer ganda.

func RTGSTransfer(ctx context.Context, t *snap.Transport, hb snap.HeaderBuilder, req RTGSTransferRequest) (RTGSTransferResponse, error)

Request — RTGSTransferRequest

PartnerReferenceNo, Amount, BeneficiaryAccountNo, BeneficiaryAccountName, BeneficiaryBankCode, SourceAccountNo, TransactionDate, BeneficiaryCustomerResidence, dan BeneficiaryCustomerType wajib diisi. OriginatorInfos Kondisional.

FieldTypePresence
partnerReferenceNostringWajib
amountsnap.MoneyWajib
beneficiaryAccountNostringWajib
beneficiaryAccountNamestringWajib
beneficiaryAddressstringOpsional
beneficiaryBankCodestringWajib
beneficiaryBankNamestringOpsional
beneficiaryEmailstringOpsional
currencystringOpsional
customerReferencestringOpsional
feeTypestringOpsional
remarkstringOpsional
sourceAccountNostringWajib
transactionDatestringWajib
beneficiaryCustomerResidencestringWajib
beneficiaryCustomerTypestringWajib
kodeposstringOpsional
receiverPhonestringOpsional
senderCustomerResidencestringOpsional
senderCustomerTypestringOpsional
senderPhonestringOpsional
originatorInfos[]TransferOriginatorInfoOpsional
additionalInfojson.RawMessageOpsional
TransferOriginatorInfo fields

Bentuk entri “originatorInfos[]” yang dipakai bersama di seluruh kelompok Trigger Transfer. Ketiga field bertipe String.

FieldTypePresence
originatorCustomerNostringWajib
originatorCustomerNamestringWajib
originatorBankCodestringWajib

Response — RTGSTransferResponse

FieldTypePresence
responseCodestringWajib
responseMessagestringWajib
referenceNostringOpsional
partnerReferenceNostringOpsional
amount*snap.MoneyOpsional
beneficiaryAccountNostringOpsional
currencystringOpsional
customerReferencestringOpsional
sourceAccountNostringOpsional
transactionDatestringOpsional
traceNostringOpsional
transactionStatusstringOpsional
transactionStatusDescstringOpsional
beneficiaryAccountTypestringOpsional
originatorInfos[]TransferOriginatorInfoOpsional
additionalInfojson.RawMessageOpsional
TransferOriginatorInfo fields

Bentuk entri “originatorInfos[]” yang dipakai bersama di seluruh kelompok Trigger Transfer. Ketiga field bertipe String.

FieldTypePresence
originatorCustomerNostringWajib
originatorCustomerNamestringWajib
originatorBankCodestringWajib

RTGS Notification

Hanya masuk (inbound) — package ini tidak memanggil endpoint untuk ini. Partner/switcher yang mengirim POST ke callback URL Anda; unmarshal body-nya ke RTGSNotificationRequest setelah diverifikasi dengan snap.ServerVerifier (lihat Verifying inbound requests), lalu balas dengan bentuk di bawah.

Diterima — RTGSNotificationRequest

Body callback settlement untuk API RTGS - Notification (Service Code 76, path …/{version}/transfer-rtgs/notify). latestTransactionStatus, beneficiaryAccountName, beneficiaryAccountNo, beneficiaryBankCode, sourceAccountNo, dan transactionDate wajib diisi.

FieldTypePresence
originalPartnerReferenceNostringOpsional
originalReferenceNostringOpsional
originalExternalIdstringOpsional
latestTransactionStatusstringWajib
amount*snap.MoneyOpsional
beneficiaryAccountNamestringWajib
beneficiaryAccountNostringWajib
beneficiaryBankCodestringWajib
sourceAccountNostringWajib
transactionDatestringWajib
additionalInfojson.RawMessageOpsional

Handler Anda membalas dengan — RTGSNotificationResponse

Hanya berisi envelope, tidak ada field lain.

FieldTypePresence
responseCodestringWajib
responseMessagestringWajib

SKNBITransfer

Memanggil endpoint SNAP Transfer SKNBI (Service Code 23, path …/{version}/transfer-skn). hb harus sudah diisi semua field yang dibutuhkan snap.HeaderBuilder kecuali Body — fungsi ini yang mengisinya sendiri agar byte yang sama persis dipakai untuk signing maupun request di wire.

Tidak idempoten — tidak di-retry otomatis. Kalau me-retry request yang gagal/timeout, pakai X-EXTERNAL-ID yang sama; ID baru berisiko bikin transfer ganda.

func SKNBITransfer(ctx context.Context, t *snap.Transport, hb snap.HeaderBuilder, req SKNBITransferRequest) (SKNBITransferResponse, error)

Request — SKNBITransferRequest

Bentuknya sama dengan RTGSTransferRequest, hanya beda service code dan path. partnerReferenceNo, amount, beneficiaryAccountNo, beneficiaryAccountName, beneficiaryBankCode, sourceAccountNo, transactionDate, beneficiaryCustomerResidence, dan beneficiaryCustomerType wajib diisi. originatorInfos Kondisional.

FieldTypePresence
partnerReferenceNostringWajib
amountsnap.MoneyWajib
beneficiaryAccountNostringWajib
beneficiaryAccountNamestringWajib
beneficiaryAddressstringOpsional
beneficiaryBankCodestringWajib
beneficiaryBankNamestringOpsional
beneficiaryEmailstringOpsional
currencystringOpsional
customerReferencestringOpsional
feeTypestringOpsional
remarkstringOpsional
sourceAccountNostringWajib
transactionDatestringWajib
beneficiaryCustomerResidencestringWajib
beneficiaryCustomerTypestringWajib
kodeposstringOpsional
receiverPhonestringOpsional
senderCustomerResidencestringOpsional
senderCustomerTypestringOpsional
senderPhonestringOpsional
originatorInfos[]TransferOriginatorInfoOpsional
additionalInfojson.RawMessageOpsional
TransferOriginatorInfo fields

Bentuk entri “originatorInfos[]” yang dipakai bersama di seluruh kelompok Trigger Transfer. Ketiga field bertipe String.

FieldTypePresence
originatorCustomerNostringWajib
originatorCustomerNamestringWajib
originatorBankCodestringWajib

Response — SKNBITransferResponse

Bentuknya sama dengan RTGSTransferResponse.

FieldTypePresence
responseCodestringWajib
responseMessagestringWajib
referenceNostringOpsional
partnerReferenceNostringOpsional
amount*snap.MoneyOpsional
beneficiaryAccountNostringOpsional
currencystringOpsional
customerReferencestringOpsional
sourceAccountNostringOpsional
transactionDatestringOpsional
traceNostringOpsional
transactionStatusstringOpsional
transactionStatusDescstringOpsional
beneficiaryAccountTypestringOpsional
originatorInfos[]TransferOriginatorInfoOpsional
additionalInfojson.RawMessageOpsional
TransferOriginatorInfo fields

Bentuk entri “originatorInfos[]” yang dipakai bersama di seluruh kelompok Trigger Transfer. Ketiga field bertipe String.

FieldTypePresence
originatorCustomerNostringWajib
originatorCustomerNamestringWajib
originatorBankCodestringWajib

SKNBI Notification

Hanya masuk (inbound) — package ini tidak memanggil endpoint untuk ini. Partner/switcher yang mengirim POST ke callback URL Anda; unmarshal body-nya ke SKNBINotificationRequest setelah diverifikasi dengan snap.ServerVerifier (lihat Verifying inbound requests), lalu balas dengan bentuk di bawah.

Diterima — SKNBINotificationRequest

Body callback settlement untuk API SKNBI - Notification (Service Code 75, path …/{version}/transfer-skn/notify) — bentuknya sama dengan RTGSNotificationRequest. latestTransactionStatus, beneficiaryAccountName, beneficiaryAccountNo, beneficiaryBankCode, sourceAccountNo, dan transactionDate wajib diisi.

FieldTypePresence
originalPartnerReferenceNostringOpsional
originalReferenceNostringOpsional
originalExternalIdstringOpsional
latestTransactionStatusstringWajib
amount*snap.MoneyOpsional
beneficiaryAccountNamestringWajib
beneficiaryAccountNostringWajib
beneficiaryBankCodestringWajib
sourceAccountNostringWajib
transactionDatestringWajib
additionalInfojson.RawMessageOpsional

Handler Anda membalas dengan — SKNBINotificationResponse

Bentuknya sama dengan RTGSNotificationResponse: hanya berisi envelope, tidak ada field lain.

FieldTypePresence
responseCodestringWajib
responseMessagestringWajib