Dwolla Developers Logo
  • Getting Started
    Testing in the Sandbox
    Generate an OAuth Access Token
    Send Money to Users
    Receive Money from Users
    Transfer Money Between Users
    Transfer Money Me-to-Me
    OverviewStep 1: Create a customerStep 2: Add funding sourcesStep 3: Retrieve funding sourcesStep 4: Create transfer
    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 1: Creating your Customer #

Choose the Customer Type for Your Funds Flow #

Before your end-user can send or receive funds to their connected bank account, they must be created as a Customer via the Dwolla API. With this funds flow, however, the only eligible Customer types are:

  • Verified Personal Customers
  • Verified Business Customers

To learn more on the differences between personal and business verified Customers and the capabilities of each, check out our developer resource article.

Verified Customers must go through the identity verification process and have a verified status in order to be eligible to transact. In order to verify the identity of the individual or business creating a Dwolla Customer account, you will need to pass information including, but not limited to, social security number (ssn), address, date of birth, and/or Employer Identification Number (EIN).

Step 1A. Create the Customer #

While both the Personal and Business verified Customer types are valid in this funds flow, we will be creating a Personal verified Customer in this guide.

Request Parameters - Personal Verified Customer

ParameterRequiredTypeDescriptionfirstNameyesstringIndividual’s legal first name.lastNameyesstringIndividual’s legal last name.emailyesstringCustomer’s email address.typeyesstringType of identity verified Customer. Value of personal for individual.address1yesstringStreet number, street name of individual’s physical address.address2nostringApartment, floor, suite, bldg # of individual’s physical address.cityyesstringCity of individual’s physical address.stateyesstringTwo-letter US state or territory abbreviation code of individual’s physical address.postalCodeyesstringCustomer’s US five-digit ZIP or ZIP + 4 code.dateOfBirthyesstringCustomer’s date of birth. Must be 18 years of age with format of YYYY-MM-DD.ssnyesstringLast four-digits of individual’s social security number.

Request and response (view schema in ‘raw’)

var requestBody = {
  firstName: "John",
  lastName: "Doe",
  email: "jdoe@nomail.net",
  type: "personal",
  address1: "99-99 33rd St",
  city: "Some City",
  state: "NY",
  postalCode: "11101",
  dateOfBirth: "1970-01-01",
  // For the first attempt, only the
  // last 4 digits of SSN required
  // If the entire SSN is provided,
  // it will still be accepted
  ssn: "1234",

  .post("customers", requestBody)
  .then((res) => res.headers.get("location")); // => 'https://api-sandbox.dwolla.com/customers/FC451A7A-AE30-4404-AB95-E3553FCD733F'

When the Customer is successfully created on your application, you will receive a 201 HTTP response with an empty response body. You can reference the Location header to retrieve a link that represents the created Customer resource. We recommend storing the full URL for future use, as it will be needed for actions such as attaching a bank or correlating webhooks that are triggered for the user in the Dwolla system.

Providing the IP address of the end-user accessing your application as the ipAddress parameter. This enhances fraud detection and tracking.

Step 1B: Handle Webhooks #

If you have an active webhook subscription, you will receive the customer_created and customer_verified webhook immediately after the resource has been created.

Additional expected behavior #

Customer Statuses #

Not all Customers will have a verified status upon initial Customer creation. In production, you may run into an instance where more information is needed from your end-user in order for Dwolla to fully verify their identity. Other statuses your Customer may be placed in include, retry, document, deactivated, or suspended. For more information on these statuses, refer to our developer resource article.

Balance Funding Source #

On successful Customer verification, Dwolla will also create a Balance Funding Source for this Customer.

There are two types of Funding Sources available within the Dwolla Platform which include a bank or a balance. A bank account is commonly used as the source or destination for ACH transfers. A balance is a Funding Source that can be utilized like a “wallet” for holding a stored value of funds. The Dwolla balance is made available for Customers that have fully verified their identity within Dwolla.

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.