Smart Bank Transfers

Overview

SMART_BANK_TRANSFER enables real-time or delayed account-to-account (A2A) payments via domestic or international bank rails. Commonly used for:

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

The system dynamically routes requests to supported providers based on the user's region, account info, and merchant configuration.


🌍 Supported Bank Transfer Methods

MethodMarkets SupportedNotes
iDEALNetherlandsReal-time, EUR only
Sofort / Klarna Pay NowGermany, Austria, Switzerland, EU-wideRedirect with near-instant transfer
giropayGermanyBank login via ELV debit
EPSAustriaAustrian e-banking integration
Bancontact / MisterCashBelgiumLocal Belgian banking rails
MyBankItalyPush transfer with Italian banks
TrustlyEU & Nordics (SE, FI, etc.)Instant A2A across Europe
SEPA Direct DebitEU-wideDebits user accounts with consent
Latvian, Estonian, Lithuanian BanksBalticsLuminor, SEB, Revolut, Citadele
MULTIBANCOPortugalReference code + ATM or online banking
FPXMalaysiaReal-time bank payments
POLiAustralia, New ZealandRedirect with bank login
PSEColombiaBank-linked checkout
SPEIMexicoReal-time local bank transfers
PayU / Przelewy24 / BLIKPolandBLIK supports instant mobile codes
QiwiRussia / CISCan include bank transfer + wallet mode
Bradesco / Santander / ItaúBrazilLocal Brazilian bank rails
Interac / EFT (Canada)CanadaBank transfer with confirmation + vaulting
ACH / RTP / FedNow (US)United StatesReal-time and batch bank networks
UK Open Banking (AmEx / Nuvei)United KingdomOpen banking-based routing; requires session token

📤 Request Payload: SmartBankTransferPayload

FieldTypeRequired?Description
paymentMethodApmMethodYes (default)Always SMART_BANK_TRANSFER
paymentTypeApmFlowTypeYes (default)Always BANK_TRANSFER
accountHolderNameString?Name of the account owner
personalIdString?National ID or tax number (if required)
bankAccountTypeString?e.g., "checking", "savings"
accountNumberString?✅/❌Domestic account number (varies by region)
accountHolderPhoneNumberString?Optional contact number
ibanString?✅ (EU)Required in SEPA/EU
bicString?✅ (EU/SEPA)Often required with IBAN
swiftCodeString?Used for international routing
routingNumberString?✅/❌US/CA/UK domestic routing (e.g., ABA)
sortCodeString?✅ (UK)6-digit UK routing code
institutionNumberString?Canadian institution code
transitNumberString?Canadian transit branch code
bankCodeString?Generic bank identifier (varies)
branchCodeString?Branch-specific routing info
bankCleaningSystemIdString?Specific to some domestic schemes
bankNameString?Human-readable bank name
bankCityString?City of bank branch

📥 Response Data: SmartBankTransferResponseData

FieldTypeRequired?Description
paymentMethodApmMethodYesAlways SMART_BANK_TRANSFER
paymentTypeApmFlowTypeYesAlways BANK_TRANSFER
redirectUrlString?OptionalRedirect user to bank login or confirmation page
iframeUrlString?OptionalIf iframe integration is available
providerTransactionIdStringTransaction reference from provider
accountHolderNameString?OptionalName of the user making the transfer
maskedAccountNumberString?OptionalPartially masked account number
branchCodeString?OptionalBank branch code
bankCodeString?OptionalProvider-specific bank identifier
ibanString?OptionalReturned IBAN (EU)
bicString?OptionalBIC/SWIFT code (EU)
routingNumberString?OptionalABA/Fedwire routing code
sortCodeString?OptionalUK sort code
swiftCodeString?OptionalReturned SWIFT code
accountNumberString?OptionalFull or partial returned account number
institutionNumberString?OptionalCanada-specific routing field
transitNumberString?OptionalTransit code (Canada)
bankNameString?OptionalName of the bank
bankCityString?OptionalCity of the bank branch
countryString?OptionalCountry code (e.g., "US", "DE")
bankAccountTypeString?Optional"checking", "savings", or provider-specific values
bankCleaningSystemIdString?OptionalDomestic clearing system ID
securityQuestionString?OptionalChallenge question, if required (e.g., POLi or Interac)
securityAnswerString?OptionalProvided or stored answer to security challenge
bankMetadataMap<String, String>?OptionalAdditional provider-specific metadata

✅ Best Practices

  • 📍 Use regionally appropriate fields (e.g., iban+bic in EU, routingNumber+accountNumber in US/CA).
  • 🧾 Store providerTransactionId and bankMetadata for later reconciliation.
  • 🧠 Validate input formats before sending upstream (e.g., IBAN check digits, SWIFT length).
  • 🛡️ Prompt for securityQuestion only when required by the scheme (e.g., Interac or POLi).
  • 📊 Populate bankName, bankCity, and country in your UI for user confirmation.