Smart Bank Transfers

The SMART_BANK_TRANSFER method enables real-time or delayed account-to-account (A2A) payments through domestic and international banking rails. It is widely used for:

  • Push payments and invoice settlements
  • Bank reference-based voucher payments
  • Online banking integrations (e.g., iDEAL, POLi, FPX)

The Smart APM engine automatically routes each request to the most suitable provider based on the user’s region, bank account details, and merchant configuration, ensuring seamless local and cross-border bank transfers.


Supported Bank Transfer Methods

MethodMarkets SupportedNotes
iDEALNetherlandsReal-time payments in EUR only.
Sofort / Klarna Pay NowGermany, Austria, Switzerland, EU-wideRedirect-based flow with near-instant bank transfer.
giropayGermanyBank login via ELV debit system.
EPSAustriaE-banking integration with Austrian banks.
Bancontact / MisterCashBelgiumDomestic Belgian bank transfer network.
MyBankItalyPush transfers through Italian banks.
TrustlyEU & Nordics (SE, FI, etc.)Instant account-to-account transfers across Europe.
SEPA Direct DebitEU-wideDebits user accounts with consent; for recurring billing.
Latvian, Estonian, Lithuanian BanksBalticsIncludes Luminor, SEB, Revolut, Citadele.
MULTIBANCOPortugalReference code-based ATM and online banking payments.
FPXMalaysiaReal-time bank payments across Malaysian banks.
POLiAustralia, New ZealandRedirect flow with secure bank login.
PSEColombiaBank-linked online checkout.
SPEIMexicoReal-time domestic bank transfers.
PayU / Przelewy24 / BLIKPolandIncludes BLIK instant mobile codes.
QiwiRussia / CISSupports combined bank transfer and wallet payments.
Bradesco / Santander / ItaúBrazilLocal Brazilian bank transfer rails.
Interac / EFT (Canada)CanadaBank transfer with confirmation and optional vaulting.
ACH / RTP / FedNowUnited StatesReal-time and batch processing via US bank networks.
UK Open Banking (AmEx / Nuvei)United KingdomOpen banking routing; session token required.

Request Payload: SmartBankTransferPayload

FieldTypeRequired?Description
paymentMethodApmMethodYes (default)Always set to SMART_BANK_TRANSFER.
paymentTypeApmFlowTypeYes (default)Always set to BANK_TRANSFER.
accountHolderNameString?YesFull name of the account owner.
personalIdString?NoNational ID or tax number if required by local banking schemes.
bankAccountTypeString?NoAccount type (e.g., "checking", "savings").
accountNumberString?Region-specificDomestic bank account number (mandatory in many regions).
accountHolderPhoneNumberString?NoContact phone number linked to the bank account.
ibanString?EU-onlyRequired for SEPA/EU-based transfers.
bicString?EU-onlyBank Identifier Code, usually required with IBAN.
swiftCodeString?NoSWIFT code for international routing.
routingNumberString?Region-specificRouting number (e.g., ABA in the US, Canadian routing).
sortCodeString?UK-only6-digit UK-specific bank sort code.
institutionNumberString?CanadaInstitution code for Canadian banks.
transitNumberString?CanadaTransit branch code for Canadian banks.
bankCodeString?NoGeneric bank identifier for certain countries.
branchCodeString?NoBranch-level routing code.
bankCleaningSystemIdString?NoClearing system ID used in some domestic bank networks.
bankNameString?NoName of the beneficiary’s bank.
bankCityString?NoCity where the bank branch is located.

Response Payload: SmartBankTransferResponseData

FieldTypeRequired?Description
paymentMethodApmMethodYesAlways returns SMART_BANK_TRANSFER.
paymentTypeApmFlowTypeYesAlways returns BANK_TRANSFER.
redirectUrlString?OptionalURL redirecting the user to their bank’s login or confirmation page.
iframeUrlString?OptionalEmbedded iframe URL for inline bank transfer checkout (if supported).
providerTransactionIdStringYesUnique transaction reference from the payment provider.
accountHolderNameString?OptionalName of the bank account holder making the transfer.
maskedAccountNumberString?OptionalMasked representation of the account number for secure display/logging.
branchCodeString?OptionalBank branch-specific code used in routing.
bankCodeString?OptionalProvider-specific bank identifier.
ibanString?OptionalInternational Bank Account Number used in EU and international transfers.
bicString?OptionalBank Identifier Code for EU transactions.
routingNumberString?OptionalABA or Fedwire routing number for US banks.
sortCodeString?OptionalUK-specific 6-digit sort code.
swiftCodeString?OptionalReturned SWIFT code for cross-border transfers.
accountNumberString?OptionalFull or partially masked account number returned in the response.
institutionNumberString?OptionalInstitution code for Canadian banks.
transitNumberString?OptionalTransit branch code for Canadian banks.
bankNameString?OptionalName of the bank used for the transaction.
bankCityString?OptionalCity location of the bank branch.
countryString?OptionalISO country code of the bank.
bankAccountTypeString?OptionalType of the bank account (e.g., "checking", "savings").
bankCleaningSystemIdString?OptionalIdentifier for domestic bank clearing systems.
securityQuestionString?OptionalChallenge question required for some schemes (e.g., POLi or Interac).
securityAnswerString?OptionalAnswer to the security challenge question.
bankMetadataMap<String, String>?OptionalAdditional metadata from the provider for reconciliation or reporting.

Best Practices

  • Regional Fields: Use iban + bic for EU payments, routingNumber + accountNumber for US/Canada, and sortCode for UK transfers.
  • Reconciliation: Store providerTransactionId and bankMetadata for reporting and dispute resolution.
  • Validation: Perform format validation (e.g., IBAN checksum, SWIFT length) before submitting requests.
  • Security Prompts: Only request securityQuestion and securityAnswer when explicitly required by the bank or payment scheme.
  • User Confirmation: Display bankName, bankCity, and country in your checkout UI for user verification.