Skip to main content
What is it? A bank transfer request initiates the process of withdrawing money directly from a customer’s bank account. This can be used for both one-time payments and recurring transactions like subscriptions or bill payments.
When to Use
  • You want to accept payments directly from customers’ bank accounts.
  • You need to set up recurring payments or subscriptions with lower transaction fees than card payments.
  • You want to offer customers an alternative payment method to credit/debit cards.
ScenarioBen sets up automatic recurring payments for his monthly keyboard maintenance kit subscription ($150) using his checking account. CoolTechGear.com submits a request to initiate a bank transfer from Ben’s account ending in 5678.

Steps

  1. Call the initiateBankTransfer mutation, passing in the required and optional input fields:
Required inputDescription
acceptorIdThe unique, 36 character identifier assigned to the entity providing the goods or services to the customer. Other processors may refer to this as the Merchant ID (MID), Outlet ID, or Customer number.
transactionReferenceThe unique transaction identifier created by YOU to distinguish this transaction from another.
paymentMethodDetailsThe bank account details or token to be used for the transfer.
amountDetailsThe amount of the transfer and its currency (only USD supported).

Payment method details

You can provide bank account details in one of two ways:
  1. Direct bank account details:
    bankAccountDetails: {
      routingNumber: "123456789"
      accountNumber: "12345678"
      bankAccountType: CHECKING
      accountOwnerType: CONSUMER
      paymentEntryMode: ECOMMERCE
      recurringType: RECURRING
      nameOnAccount: "Goku Son"
    }
    
  2. Using a previously tokenized bank account:
    acquirerTokenDetails: {
      token: "previously-generated-token"
    }
    

Amount details

When specifying the amount:
  • amountDetails:
    • totalAmount: The total amount of the transfer (e.g., 150.00)
    • currency: Currently only supports USD

Bank account types

When providing direct bank account details, specify:
  • bankAccountType:
    • CHECKING: A checking account for day-to-day transactions
    • SAVINGS: A savings account with potential withdrawal limitations
  • accountOwnerType:
    • CONSUMER: Individual/personal accounts
    • CORPORATE: Business accounts

Channel

For consumer interaction method, specify:
  • channel:
    • ECOMMERCE: Customer interacts through online interface
    • MAIL_ORDER_TELEPHONE_ORDER: Customer interacts through mail, phone, or fax

Entry modes

Indicates how the bank account information was collected:
  • paymentEntryMode:
    • KEYED: Manually entered
    • ON_FILE: Retrieved from stored credentials
Note: For online (ECOMMERCE) or telephone entries, use the channel parameter with values ECOMMERCE or MAIL_ORDER_TELEPHONE_ORDER respectively.

Recurring type

For payment frequency, specify:
  • recurringType:
    • SINGLE: One-time payments with no future transactions expected
    • RECURRING: Subscription payments, recurring bills, or installment payments
mutation InitiateBankTransfer($input: InitiateBankTransferInput!) {
  initiateBankTransfer(initiateBankTransferInput: $input) {
    bankTransferResponse {
      ... on BankTransferApproval {
        transactionId
        paymentId
        processorResponseCode
        isDuplicateRequest
      }
      ... on BankTransferDecline {
        message
        processorAdvice
        declineType
        transactionId
      }
    }
    errors {
      errorType: __typename
      ... on ValidationFailureError {
        message
        fieldPath
      }
      ... on RouteNotFoundError {
        message
      }
      ... on AcceptorNotFoundError {
        message
      }
    }
  }
}
{
  "data": {
    "initiateBankTransfer": {
      "bankTransferResponse": {
        "transactionId": "f14f0a48-35c4-4e68-b2e3-e40f6d6160a8",
        "paymentId": "792282f2-d929-4dad-8c8a-9552c92154f1",
        "processorResponseCode": "A0000",
        "isDuplicateRequest": false
      }
    }
  }
}
Run in Playground