Skip to content

Trigger Transfer

Trigger Transfer

The core money-movement calls: intrabank, interbank, bulk, request-for-payment, RTGS and SKNBI — each real-time-gross or bulk rail has its own inbound notification type your service must accept.

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

IntrabankTransfer calls the SNAP Intrabank Transfer endpoint (Service Code 17, path …/{version}/transfer-intrabank). hb must already carry every field snap.HeaderBuilder needs except Body, which IntrabankTransfer sets itself so the exact marshaled bytes are used for both signing and the wire body.

Not idempotent — retries aren’t automatic. If you retry a failed or timed-out call, reuse the same X-EXTERNAL-ID; a fresh one risks a duplicate transfer.

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

Request — IntrabankTransferRequest

IntrabankTransferRequest is the request body for API Intrabank Transfer (Service Code 17). PartnerReferenceNo, Amount, BeneficiaryAccountNo, SourceAccountNo, and TransactionDate are mandatory per the Guides tab. OriginatorInfos is Conditional.

FieldTypePresence
partnerReferenceNostringMandatory
amountsnap.MoneyMandatory
beneficiaryAccountNostringMandatory
beneficiaryEmailstringOptional
currencystringOptional
customerReferencestringOptional
feeTypestringOptional
remarkstringOptional
sourceAccountNostringMandatory
transactionDatestringMandatory
originatorInfos[]TransferOriginatorInfoOptional
additionalInfojson.RawMessageOptional
TransferOriginatorInfo fields

TransferOriginatorInfo is the shared “originatorInfos[]” entry used by the Trigger Transfer sub-group. All three fields are String per the Guides tab.

FieldTypePresence
originatorCustomerNostringMandatory
originatorCustomerNamestringMandatory
originatorBankCodestringMandatory

Response — IntrabankTransferResponse

IntrabankTransferResponse is the response body for API Intrabank Transfer.

FieldTypePresence
responseCodestringMandatory
responseMessagestringMandatory
referenceNostringOptional
partnerReferenceNostringOptional
amount*snap.MoneyOptional
beneficiaryAccountNostringOptional
currencystringOptional
customerReferencestringOptional
sourceAccountNostringOptional
transactionDatestringOptional
originatorInfos[]TransferOriginatorInfoOptional
additionalInfojson.RawMessageOptional
TransferOriginatorInfo fields

TransferOriginatorInfo is the shared “originatorInfos[]” entry used by the Trigger Transfer sub-group. All three fields are String per the Guides tab.

FieldTypePresence
originatorCustomerNostringMandatory
originatorCustomerNamestringMandatory
originatorBankCodestringMandatory

InterbankTransfer

InterbankTransfer calls the SNAP Interbank Transfer endpoint (Service Code 18, path …/{version}/transfer-interbank). hb must already carry every field snap.HeaderBuilder needs except Body, which InterbankTransfer sets itself so the exact marshaled bytes are used for both signing and the wire body.

Not idempotent — retries aren’t automatic. If you retry a failed or timed-out call, reuse the same X-EXTERNAL-ID; a fresh one risks a duplicate transfer.

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

Request — InterbankTransferRequest

InterbankTransferRequest is the request body for API Interbank Transfer (Service Code 18). PartnerReferenceNo, Amount, BeneficiaryAccountNo, BeneficiaryAccountName, BeneficiaryBankCode, SourceAccountNo, and TransactionDate are mandatory per the Guides tab. OriginatorInfos is Conditional.

FieldTypePresence
partnerReferenceNostringMandatory
amountsnap.MoneyMandatory
beneficiaryAccountNostringMandatory
beneficiaryAccountNamestringMandatory
beneficiaryAddressstringOptional
beneficiaryBankCodestringMandatory
beneficiaryBankNamestringOptional
beneficiaryEmailstringOptional
currencystringOptional
customerReferencestringOptional
feeTypestringOptional
remarkstringOptional
sourceAccountNostringMandatory
transactionDatestringMandatory
originatorInfos[]TransferOriginatorInfoOptional
additionalInfojson.RawMessageOptional
TransferOriginatorInfo fields

TransferOriginatorInfo is the shared “originatorInfos[]” entry used by the Trigger Transfer sub-group. All three fields are String per the Guides tab.

FieldTypePresence
originatorCustomerNostringMandatory
originatorCustomerNamestringMandatory
originatorBankCodestringMandatory

Response — InterbankTransferResponse

InterbankTransferResponse is the response body for API Interbank Transfer.

FieldTypePresence
responseCodestringMandatory
responseMessagestringMandatory
referenceNostringOptional
partnerReferenceNostringOptional
amount*snap.MoneyOptional
beneficiaryAccountNostringOptional
currencystringOptional
customerReferencestringOptional
sourceAccountNostringOptional
transactionDatestringOptional
traceNostringOptional
originatorInfos[]TransferOriginatorInfoOptional
additionalInfojson.RawMessageOptional
TransferOriginatorInfo fields

TransferOriginatorInfo is the shared “originatorInfos[]” entry used by the Trigger Transfer sub-group. All three fields are String per the Guides tab.

FieldTypePresence
originatorCustomerNostringMandatory
originatorCustomerNamestringMandatory
originatorBankCodestringMandatory

InterbankBulkTransfer

InterbankBulkTransfer calls the SNAP Interbank Bulk Transfer endpoint (Service Code 20, path …/{version}/transfer-interbank-bulk). hb must already carry every field snap.HeaderBuilder needs except Body, which InterbankBulkTransfer sets itself so the exact marshaled bytes are used for both signing and the wire body.

Not idempotent — retries aren’t automatic. If you retry a failed or timed-out call, reuse the same X-EXTERNAL-ID; a fresh one risks a duplicate bulk transfer.

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

Request — InterbankBulkTransferRequest

InterbankBulkTransferRequest is the request body for API Interbank Bulk Transfer (Service Code 20). CustomerReference, SourceAccountNo, TransactionDate, and BulkObject are mandatory per the Guides tab.

FieldTypePresence
partnerBulkIdstringOptional
currencystringOptional
customerReferencestringMandatory
feeTypestringOptional
remarkstringOptional
sourceAccountNostringMandatory
transactionDatestringMandatory
bulkObject[]InterbankBulkTransferItemMandatory
additionalInfojson.RawMessageOptional
InterbankBulkTransferItem fields

InterbankBulkTransferItem is one entry in Interbank Bulk Transfer’s request “bulkObject[]” array.

FieldTypePresence
partnerReferenceNostringMandatory
bankCodestringMandatory
beneficiaryAccountNostringMandatory
beneficiaryAccountNamestringMandatory
amountsnap.MoneyMandatory
originatorInfos[]TransferOriginatorInfoOptional
additionalInfojson.RawMessageOptional
TransferOriginatorInfo fields

TransferOriginatorInfo is the shared “originatorInfos[]” entry used by the Trigger Transfer sub-group. All three fields are String per the Guides tab.

FieldTypePresence
originatorCustomerNostringMandatory
originatorCustomerNamestringMandatory
originatorBankCodestringMandatory

Response — InterbankBulkTransferResponse

InterbankBulkTransferResponse is the response body for API Interbank Bulk Transfer.

FieldTypePresence
responseCodestringMandatory
responseMessagestringMandatory
bulkIdstringOptional
partnerBulkIdstringOptional
additionalInfojson.RawMessageOptional

Interbank Bulk Transfer Notification

Inbound only — this package does not call an endpoint for this. A partner/switcher POSTs it to your callback URL; unmarshal the body into InterbankBulkTransferNotificationRequest after verifying it with snap.ServerVerifier (see Verifying inbound requests), then reply with the shape below.

Received — InterbankBulkTransferNotificationRequest

InterbankBulkTransferNotificationRequest is the settlement-callback body for API Interbank Bulk Transfer - Notification (Service Code 21, path …/{version}/transfer-interbank-bulk/notify). bulkId, partnerBulkId, and bulkObject are Mandatory.

FieldTypePresence
bulkIdstringMandatory
partnerBulkIdstringMandatory
bulkObject[]InterbankBulkTransferNotificationItemMandatory
InterbankBulkTransferNotificationItem fields

InterbankBulkTransferNotificationItem is one entry in Interbank Bulk Transfer - Notification’s request “bulkObject[]” array — a settlement-result callback shape, distinct from InterbankBulkTransferItem’s transfer-instruction shape.

FieldTypePresence
partnerReferenceNostringMandatory
responseCodestringMandatory
responseMessagestringMandatory

Your handler replies with — InterbankBulkTransferNotificationResponse

InterbankBulkTransferNotificationResponse is the response body a caller sends back for API Interbank Bulk Transfer - Notification.

FieldTypePresence
responseCodestringMandatory
responseMessagestringMandatory
bulkIdstringOptional
partnerBulkIdstringOptional
additionalInfojson.RawMessageOptional

RequestForPayment

RequestForPayment calls the SNAP Request for Payment endpoint (Service Code 19, path …/{version}/transfer-request-for-payment). hb must already carry every field snap.HeaderBuilder needs except Body, which RequestForPayment sets itself so the exact marshaled bytes are used for both signing and the wire body.

Not idempotent — retries aren’t automatic. If you retry a failed or timed-out call, reuse the same X-EXTERNAL-ID; a fresh one risks a duplicate payment request.

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

Request — RequestForPaymentRequest

RequestForPaymentRequest is the request body for API Request for Payment (Service Code 19). PartnerReferenceNo, BankCode, BeneficiaryAccountNo, BeneficiaryAccountName, ExpiredDatetime, SourceAccountNo, and SourceAccountName are mandatory per the Guides tab.

FieldTypePresence
partnerReferenceNostringMandatory
bankCodestringMandatory
beneficiaryAccountNostringMandatory
beneficiaryAccountNamestringMandatory
remarkstringOptional
expiredDatetimestringMandatory
sourceAccountNostringMandatory
sourceAccountNamestringMandatory
currencystringOptional
amount*snap.MoneyOptional
feeTypestringOptional
additionalInfojson.RawMessageOptional

Response — RequestForPaymentResponse

RequestForPaymentResponse is the response body for API Request for Payment.

FieldTypePresence
responseCodestringMandatory
responseMessagestringMandatory
referenceNostringOptional
partnerReferenceNostringOptional
additionalInfojson.RawMessageOptional

RTGSTransfer

RTGSTransfer calls the SNAP Transfer RTGS endpoint (Service Code 22, path …/{version}/transfer-rtgs). hb must already carry every field snap.HeaderBuilder needs except Body, which RTGSTransfer sets itself so the exact marshaled bytes are used for both signing and the wire body.

Not idempotent — retries aren’t automatic. If you retry a failed or timed-out call, reuse the same X-EXTERNAL-ID; a fresh one risks a duplicate transfer.

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

Request — RTGSTransferRequest

RTGSTransferRequest is the request body for API Transfer RTGS (Service Code 22). PartnerReferenceNo, Amount, BeneficiaryAccountNo, BeneficiaryAccountName, BeneficiaryBankCode, SourceAccountNo, TransactionDate, BeneficiaryCustomerResidence, and BeneficiaryCustomerType are mandatory per the Guides tab. OriginatorInfos is Conditional.

FieldTypePresence
partnerReferenceNostringMandatory
amountsnap.MoneyMandatory
beneficiaryAccountNostringMandatory
beneficiaryAccountNamestringMandatory
beneficiaryAddressstringOptional
beneficiaryBankCodestringMandatory
beneficiaryBankNamestringOptional
beneficiaryEmailstringOptional
currencystringOptional
customerReferencestringOptional
feeTypestringOptional
remarkstringOptional
sourceAccountNostringMandatory
transactionDatestringMandatory
beneficiaryCustomerResidencestringMandatory
beneficiaryCustomerTypestringMandatory
kodeposstringOptional
receiverPhonestringOptional
senderCustomerResidencestringOptional
senderCustomerTypestringOptional
senderPhonestringOptional
originatorInfos[]TransferOriginatorInfoOptional
additionalInfojson.RawMessageOptional
TransferOriginatorInfo fields

TransferOriginatorInfo is the shared “originatorInfos[]” entry used by the Trigger Transfer sub-group. All three fields are String per the Guides tab.

FieldTypePresence
originatorCustomerNostringMandatory
originatorCustomerNamestringMandatory
originatorBankCodestringMandatory

Response — RTGSTransferResponse

RTGSTransferResponse is the response body for API Transfer RTGS.

FieldTypePresence
responseCodestringMandatory
responseMessagestringMandatory
referenceNostringOptional
partnerReferenceNostringOptional
amount*snap.MoneyOptional
beneficiaryAccountNostringOptional
currencystringOptional
customerReferencestringOptional
sourceAccountNostringOptional
transactionDatestringOptional
traceNostringOptional
transactionStatusstringOptional
transactionStatusDescstringOptional
beneficiaryAccountTypestringOptional
originatorInfos[]TransferOriginatorInfoOptional
additionalInfojson.RawMessageOptional
TransferOriginatorInfo fields

TransferOriginatorInfo is the shared “originatorInfos[]” entry used by the Trigger Transfer sub-group. All three fields are String per the Guides tab.

FieldTypePresence
originatorCustomerNostringMandatory
originatorCustomerNamestringMandatory
originatorBankCodestringMandatory

RTGS Notification

Inbound only — this package does not call an endpoint for this. A partner/switcher POSTs it to your callback URL; unmarshal the body into RTGSNotificationRequest after verifying it with snap.ServerVerifier (see Verifying inbound requests), then reply with the shape below.

Received — RTGSNotificationRequest

RTGSNotificationRequest is the settlement-callback body for API RTGS - Notification (Service Code 76, path …/{version}/transfer-rtgs/notify). latestTransactionStatus, beneficiaryAccountName, beneficiaryAccountNo, beneficiaryBankCode, sourceAccountNo, and transactionDate are Mandatory.

FieldTypePresence
originalPartnerReferenceNostringOptional
originalReferenceNostringOptional
originalExternalIdstringOptional
latestTransactionStatusstringMandatory
amount*snap.MoneyOptional
beneficiaryAccountNamestringMandatory
beneficiaryAccountNostringMandatory
beneficiaryBankCodestringMandatory
sourceAccountNostringMandatory
transactionDatestringMandatory
additionalInfojson.RawMessageOptional

Your handler replies with — RTGSNotificationResponse

RTGSNotificationResponse is the response body a caller sends back for API RTGS - Notification — envelope-only, no other fields.

FieldTypePresence
responseCodestringMandatory
responseMessagestringMandatory

SKNBITransfer

SKNBITransfer calls the SNAP Transfer SKNBI endpoint (Service Code 23, path …/{version}/transfer-skn). hb must already carry every field snap.HeaderBuilder needs except Body, which SKNBITransfer sets itself so the exact marshaled bytes are used for both signing and the wire body.

Not idempotent — retries aren’t automatic. If you retry a failed or timed-out call, reuse the same X-EXTERNAL-ID; a fresh one risks a duplicate transfer.

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

Request — SKNBITransferRequest

SKNBITransferRequest is the request body for API Transfer SKNBI (Service Code 23) — the same shape as RTGSTransferRequest, with its own service code and path. partnerReferenceNo, amount, beneficiaryAccountNo, beneficiaryAccountName, beneficiaryBankCode, sourceAccountNo, transactionDate, beneficiaryCustomerResidence, and beneficiaryCustomerType are Mandatory. originatorInfos is Conditional.

FieldTypePresence
partnerReferenceNostringMandatory
amountsnap.MoneyMandatory
beneficiaryAccountNostringMandatory
beneficiaryAccountNamestringMandatory
beneficiaryAddressstringOptional
beneficiaryBankCodestringMandatory
beneficiaryBankNamestringOptional
beneficiaryEmailstringOptional
currencystringOptional
customerReferencestringOptional
feeTypestringOptional
remarkstringOptional
sourceAccountNostringMandatory
transactionDatestringMandatory
beneficiaryCustomerResidencestringMandatory
beneficiaryCustomerTypestringMandatory
kodeposstringOptional
receiverPhonestringOptional
senderCustomerResidencestringOptional
senderCustomerTypestringOptional
senderPhonestringOptional
originatorInfos[]TransferOriginatorInfoOptional
additionalInfojson.RawMessageOptional
TransferOriginatorInfo fields

TransferOriginatorInfo is the shared “originatorInfos[]” entry used by the Trigger Transfer sub-group. All three fields are String per the Guides tab.

FieldTypePresence
originatorCustomerNostringMandatory
originatorCustomerNamestringMandatory
originatorBankCodestringMandatory

Response — SKNBITransferResponse

SKNBITransferResponse is the response body for API Transfer SKNBI — the same shape as RTGSTransferResponse.

FieldTypePresence
responseCodestringMandatory
responseMessagestringMandatory
referenceNostringOptional
partnerReferenceNostringOptional
amount*snap.MoneyOptional
beneficiaryAccountNostringOptional
currencystringOptional
customerReferencestringOptional
sourceAccountNostringOptional
transactionDatestringOptional
traceNostringOptional
transactionStatusstringOptional
transactionStatusDescstringOptional
beneficiaryAccountTypestringOptional
originatorInfos[]TransferOriginatorInfoOptional
additionalInfojson.RawMessageOptional
TransferOriginatorInfo fields

TransferOriginatorInfo is the shared “originatorInfos[]” entry used by the Trigger Transfer sub-group. All three fields are String per the Guides tab.

FieldTypePresence
originatorCustomerNostringMandatory
originatorCustomerNamestringMandatory
originatorBankCodestringMandatory

SKNBI Notification

Inbound only — this package does not call an endpoint for this. A partner/switcher POSTs it to your callback URL; unmarshal the body into SKNBINotificationRequest after verifying it with snap.ServerVerifier (see Verifying inbound requests), then reply with the shape below.

Received — SKNBINotificationRequest

SKNBINotificationRequest is the settlement-callback body for API SKNBI - Notification (Service Code 75, path …/{version}/transfer-skn/notify) — the same shape as RTGSNotificationRequest. latestTransactionStatus, beneficiaryAccountName, beneficiaryAccountNo, beneficiaryBankCode, sourceAccountNo, and transactionDate are Mandatory.

FieldTypePresence
originalPartnerReferenceNostringOptional
originalReferenceNostringOptional
originalExternalIdstringOptional
latestTransactionStatusstringMandatory
amount*snap.MoneyOptional
beneficiaryAccountNamestringMandatory
beneficiaryAccountNostringMandatory
beneficiaryBankCodestringMandatory
sourceAccountNostringMandatory
transactionDatestringMandatory
additionalInfojson.RawMessageOptional

Your handler replies with — SKNBINotificationResponse

SKNBINotificationResponse is the response body a caller sends back for API SKNBI - Notification — the same shape as RTGSNotificationResponse: envelope-only, no other fields.

FieldTypePresence
responseCodestringMandatory
responseMessagestringMandatory