By: Dwolla,

This blog post comes from Spencer Hunter, a Developer Evangelist here at Dwolla. He’s your go-to for integration questions, and loves the Iowa State Cyclones.


So you want to integrate payments into your application?

You head over to Google and search ‘integrate payments’ and the barrage of information is seemingly endless, countless options each with their unique value prop. In your search you’ll come across ACH transfers.

If this term is foreign, don’t stress. We’re going to break down ACH transfers for developers right here, and then we’ll explain more specifically what you need to know about an ACH transfer powered by Dwolla.

A brief overview of ACH

ACH refers to the Automated Clearing House, an electronic network that allows banks and their customers  to send funds between one another in the United States. Basically, when you pay a bill online and opt to use a ‘bank account’ rather than a credit card, your payment is being processed through the ACH network. By entering your account and routing number instead of your credit card number, you’re initiating an ACH transaction.

For a more details breakdown of ACH, check out this ACH for beginners blog post.

How ACH works with Dwolla

Think of Dwolla as the on-ramp to the ACH network. Dwolla’s API alone does not let you process payments, but rather it connects you to enable bank transfers between you and your users.

Integrating Dwolla into your platform or application allows you to enable bank transfers via the ACH network. With Dwolla White Label our ACH transfers fall behind the look and feel of your brand—better yet, some partners have even integrated this in as little as two weeks.

Dwolla ACH transfer lifecycle and events

Dwolla’s API simplifies the ACH bank transfer process down to a single API call. Your application tells Dwolla the “funding source”(Bank Account) of the payer, and the destination account or email. Behind the scenes Dwolla handles the necessary steps to send the transfer through the ACH network, notifying your application along the way of any ‘Event` that occurs throughout the transfer process via webhooks.

In this example, we’ll outline a Dwolla user, “Bob” making a payout from your application at 2pm CST on Monday from his bank account to “Alice’s” email address, an email that is not associated with an existing user account.

It is important to note that Dwolla is a network in itself, meaning that all bank transfers are routed through the Dwolla network before reaching their intended destination. Think of this as an archway the funds pass through before reaching Alice’s account.

Assumption: Bob has a Dwolla account already created and has linked and verified his bank account.

Transfer created

Bob will specify which bank account he intends to use as the source of his transfer—represented as a unique funding source resource within Dwolla—and where he wants those funds to go. In this example, he wants the funds to go to an email address.

Using the transfer API and with authorization from Bob, your application will call Dwolla’s API telling Dwolla to create an ACH transfer. If the API call was successful, Dwolla will create a unique transfer ID: 8576f0c3-d1cd-e511-80de-0aa34a9b2388. At which point, a notification with the topic of ‘transfer_created’ is sent asynchronously to your application.


Events: bank_transfer_created and transfer_created
Transfer status: “pending”

Transfer in-process

Dwolla’s cut off for bank transfers is 4pm CST, and once our file has been sent out for the day, the process described in our ACH for beginners blog post takes over.  While the transfer is being processed through the ACH network, the transfer status remains as “pending”.

Transfer status: “pending”

Transfer settlement

Once the funds have cleared in the Dwolla network, Alice will receive an email stating that she’s received funds from Bob, and she can quickly claim these funds by creating a Dwolla Direct account—a simple process in which she provides her routing and account number. As soon as these funds have cleared, a transfer_completed event is sent via webhook to your application and the transfer status is updated to “processed”. All subsequent transfers to Alice’s email address will be routed directly to her linked financial institution.

Events: bank_transfer_completed and transfer_completed
Transfer status: “processed”

Transfer failures and ACH returns

Due to the nature of ACH, a bank transfer can fail for a number of reasons, even after the transfer has been processed (Insufficient funds, payment dispute, closed bank account, etc.). Your application should be prepared to handle ‘transfer_failed’ events from Dwolla. More information here.

As a developer, facilitating ACH transactions can be simple, and the first step is getting familiar with what that flow looks like. Now that we’ve explained what an ACH transaction looks like with Dwolla, get started with your integration today!

Get started with your own integration

We'll help you design your ideal payments experience.


Thank you

A Dwolla representative will reach out to you within one business day.


There was an error and your the form was not submitted.

Financial institutions play an important role in the Dwolla network.

Dwolla, Inc. is an agent of Veridian Credit Union and Compass Bank and all funds associated with your account in the Dwolla network are held in pooled accounts at Veridian Credit Union and Compass Bank. These funds are not eligible for individual insurance, including FDIC insurance and may not be eligible for share insurance by the National Credit Union Share Insurance Fund. Dwolla, Inc. is the operator of a software platform that communicates user instructions for funds transfers to Veridian Credit Union and Compass Bank.