Step 1: Create recipients using the Dwolla API

Choose the Customer Type for your Recipient

Before your end user can receive funds to their connected bank account, they must be created as a Customer via the Dwolla API. The ability to send funds to end users is very flexible in that all Customer types can be used to leverage this funds flow. To learn more about the different types of Customers and the capabilities of each, check out our developer resource article.

Step 1A. Create the Customer

While you can use any Customer type for this funds flow, we will be creating a receive-only user in this guide, as it offers a lightweight onboarding experience for users. Just as the name implies, receive-only users are only eligible to receive funds into their attached bank account.

Request Parameters - Receive-only User

firstNameyesstringCustomer’s first name
lastNameyesstringCustomer’s last name
emailyesstringCustomer’s email address
typeyesstringValue of receive-only
businessNamenostringCustomer’s registered business name (optional if not a business entity)
ipAddressnostringCustomer’s IP address
Content-Type: application/vnd.dwolla.v1.hal+json
Accept: application/vnd.dwolla.v1.hal+json
Authorization: Bearer 0Sn0W6kzNicvoWhDbQcVSKLRUpGjIdlPSEYyrHqrDDoRnQwE7Q
  "firstName": "Jane",
  "lastName": "Merchant",
  "email": "",
  "type": "receive-only",
  "ipAddress": ""

HTTP/1.1 201 Created
request_body = {
  :firstName => 'Jane',
  :lastName => 'Merchant',
  :email => '',
  :type => 'receive-only',
  :ipAddress => ''

# Using DwollaV2 - (Recommended)
customer = "customers", request_body
customer.response_headers[:location] # => ""
var requestBody = {
  firstName: 'Jane',
  lastName: 'Merchant',
  email: '',
  type: 'receive-only',
  ipAddress: ''

  .post('customers', requestBody)
  .then(function(res) {
    res.headers.get('location'); // => ''
request_body = {
  'firstName': 'Jane',
  'lastName': 'Merchant',
  'email': '',
  'type': 'receive-only',
  'ipAddress': ''

# Using dwollav2 - (Recommended)
customer ='customers', request_body)
customer.headers['location'] # => ''
$customersApi = new DwollaSwagger\CustomersApi($apiClient);

$customer = $customersApi->create([
  'firstName' => 'Jane',
  'lastName' => 'Merchant',
  'email' => '',
  'type' => 'receive-only'
  'ipAddress' => ''

print($customer); # => ""
  1. Provide the IP address of the end-user accessing your application as the `ipAddress` parameter. This enhances fraud detection and tracking.

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.

Step 1B. Handle Webhooks

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

Production: Operational

Financial institutions play an important role in the Dwolla network.

Dwolla, Inc. is an agent of Veridian Credit Union and all funds associated with your account in our network are held in one or more pooled accounts at Veridian Credit Union. These funds 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.