Dwolla Developers Logo
  • Getting Started
    Testing in the Sandbox
    Generate an OAuth Access Token
    Send Money to Users
    OverviewStep 1: Create a customerStep 2: Add a funding sourceStep 3: Retrieve funding sourcesStep 4: Create a transfer
    Receive Money from Users
    Transfer Money Between Users
    Transfer Money Me-to-Me
    Building With Drop-in Components
  • Customers
    Create a Business Verified Customer
    Create a Personal Verified Customer
  • Funding Sources
    Add a Debit Card Using Dwolla-cards.js
    Add a Bank Using Dwolla.js
    Add a Bank Using Dwolla.js + IAV
    Verify Bank with Micro-deposits
    Add Bank via Dwolla + Plaid Integration
  • Webhooks
    Create a Webhook Subscription
API DocsOpen in new tabChangelog
Get API Keys
API DocsOpen in new tabChangelog
Get API Keys

Step 2: Adding a Funding Source #

After creating our receive-only User, the next step is to attach a bank funding source. This will be the funding source where they will receive funds.

Bank Addition and Verification methods #

Within Dwolla, the sending party must always verify their bank account in order to be eligible to create a transfer. Although it’s recommended, the party that is receiving the funds does not need to undergo bank verification.

There are three ways of adding a bank to a Customer with the Dwolla API. A simplified table below outlines the similarities and differences of each method.

Bank Addition MethodWill the bank be verified?Required InformationAPI - Account/Routing NumberOptional - With MicrodepositsBank Account and Routing NumberDwolla.js - Instant Account Verification (IAV)yesOnline bank credentialsThird Party - PlaidyesOnline bank credentials

Step 2A: Adding a Bank to the Receive-only User #

In this step, we will be adding a bank account to our receive-only user by collecting their bank details within a form on our application. After initial validation of the form fields, the user’s bank details will be submitted to our back-end server where the API request is made to Dwolla to add a bank account.

For more information on securely submitting a user’s bank details directly to Dwolla from the client-side of your application, reference our helper library dwolla.js .

Request Parameters - Create a Funding Source

ParameterRequired?TypeDescriptionroutingNumberyesstringThe bank routing numberaccountNumberyesstringThe bank account numberbankAccountTypeyesstringType of bank account: checking or savingsnameyesstringArbitrary nickname for the funding source. Must be 50 characters or less
var customerUrl =
var requestBody = {
  routingNumber: "222222226",
  accountNumber: "123456789",
  bankAccountType: "checking",
  name: "Jane Merchant - Checking 6789",

  .post(`${customerUrl}/funding-sources`, requestBody)
  .then(function (res) {
    res.headers.get("location"); // => 'https://api-sandbox.dwolla.com/funding-sources/375c6781-2a17-476c-84f7-db7d2f6ffb31'

When the funding source is created, you will receive a 201 HTTP response with an empty response body. You can refer to the Location header to retrieve a link to the created funding source resource. We recommend storing the full URL for future use as it will be referenced when creating the transfer to this user’s bank account.

Step 2B: Handle Webhooks #

If you have an active webhook subscription (required in production & optional in Sandbox), you will receive the customer_funding_source_created webhook immediately after the resource has been created.

Test in the Sandbox for free today.

Use sandbox environment to test API requests.

Get API Keys
2021 All Rights Reserved


  • About
  • Blog
  • Pricing
  • Contact Sales
  • Terms of Service
  • Privacy Policy
Financial institutions play an important role in our network.

Dwolla, Inc. is the operator of a software platform that communicates user instructions for funds transfers to our financial institution partners.

Dwolla is an agent of Veridian Credit Union. All ACH and Wire transfers are performed by Veridian Credit Union. Your Dwolla Balance, if any, is held in one or more pooled holding accounts held by Veridian Credit Union. These funds may not be eligible for share insurance by the National Credit Union Share Insurance Fund.

Sponsorship and Settlement of Push-to-Debit payment services provided by MetaBank®, N.A.
Push-to-Debit payments are typically available within 30 minutes.

Real-Time Payments are performed by Cross River Bank, which holds funds on behalf of the Receiver of such transactions in one or more pooled custodial accounts. These funds are not subject to FDIC pass-through deposit insurance.