Language

Creating Business verified Customers

The basics

To create a business verified Customer, use the Create a Customer endpoint. A business verified Customer is determined by setting the value of the type of request parameter to business and including any additional fields required for identifying the business, as well as the Controller of the business.

Key Terms

  • Beneficial owner - Any natural person who, directly or indirectly, owns 25% or more of the equity interests of the company.
  • Controller - Any natural individual who holds significant responsibilities to control, manage, or direct a company or other corporate entity (i.e. CEO, CFO, General Partner, President, etc). A company may have more than one controller, but only one controller’s information must be collected.
  • Account Admin - The representative creating the business verified Customer on behalf of the business and Controller.
  • EIN - Employer Identification Number - A unique identification number that is assigned to a business entity so that they can easily be identified by the Internal Revenue Service.
  • TIN - Taxpayer Identification Number - An identifying number used for tax purposes in the United States. … A TIN may be: a Social Security number (SSN) an Individual Taxpayer Identification Number (ITIN) an Employer Identification Number (EIN)
  • VCR - Verified Customer - A Customer that is created in the Dwolla network and is identity verified

Events

As a developer, you can expect these events to be triggered when a business verified Customer is successfully created and systematically verified:

  1. customer_created
  2. customer_verified

Create a Business Verified Customer

Request Parameters - Create a business verified Customer and controller

In order to create a business verified Customer, Dwolla requires information on both the business and the controller. Your business verified Customer Account Admin will act as the agent signing up on behalf of the business. When going through the Customer creation flow, your business verifed Customer Account Admin will only need information on one controller to successfully complete the signup flow.

ParameterRequiredTypeDescription
firstNameyesstringThe legal first name of the Account Admin or individual signing up the business verified Customer
lastNameyesstringThe legal last name of the Account Admin or individual signing up the business verified Customer
emailyesstringemail
ipAddressnostringipAddress is recommended
businessNameyesstringRegistered business name.
doingBusinessAsnostringAlternative business name.
businessTypeyesstringBusiness structure. Possible values are corporation, llc, partnership, and soleProprietorship.
businessClassificationyesstringThe industry classification Id that corresponds to Customer’s business. Reference our Dev Docs to learn how to generate this Id.
einyesstringEmployer Identification Number. Note: If the businessType is soleProprietorship, then ein can be omitted from the request.
websitenostringBusinesss’ website
controllerconditionalobjectA controller JSON object. Controllers are not required if businessType is soleProprietorship
addressyesobjectA business address JSON object reference. Parameters below.

Business address JSON object

ParameterRequiredTypeDescription
address1yesstringStreet number, street name of business’ physical address.
address2nostringApartment, floor, suite, bldg. # of business’ physical address
cityyesstringCity of business’ physical address.
stateyesstringTwo-letter US state or territory abbreviation code of business’ physical address. For two-letter abbreviation reference, check out the US Postal Service guide.
postalCodeyesstringBusiness’ US five-digit ZIP or ZIP + 4 code.

Controller JSON object

ParameterRequiredTypeDescription
firstNameyesStringThe legal first name of the controller.
lastNameyesStringThe legal last name of the controller.
titleyesStringJob title of the Customer’s Controller. IE - Chief Financial Officer
dateOfBirthyesStringThe date of birth of the controller. Formatted in YYYY-MM-DD format. Must be 18 years or older.
ssnconditionalStringLast four-digits of Controller’s social security number. Required for Controllers who reside in the United States.
addressyesobjectA controller address JSON object. Full address of the controller’s physical address. See below
passportcontidtionalobjectAn optional controller’s passport JSON object. Required for non-US individuals. Includes passport identification number and country. See below

Controller address JSON object

ParameterRequiredTypeDescription
address1yesstringStreet number, street name of Controller’s physical address.
address2nostringApartment, floor, suite, bldg. # of Controller’s physical address.
address3nostringThird line of the street address of the Controller’s physical address.
cityyesstringCity of Controller’s physical address.
stateProvinceRegionyesstringTwo-letter US state or territory abbreviation code of controller’s physical address. For two-letter abbreviation reference, check out the US Postal Service guide.
postalCodenostringController’s’ US five-digit ZIP or ZIP + 4 code.
countryyesstringCountry of controller’s physical address. Two digit ISO code, e.g. US.

Controller passport JSON object

ParameterRequiredTypeDescription
numberconditionalstringRequired for a non-U.S. person who has no Social Security number.
countryconditionalstringCountry of issued passport.

Once you submit this request, Dwolla will perform some initial validation to check for formatting issues such as an invalid date of birth, invalid email format, etc. If successful, the response will be a HTTP 201/Created with the URL of the new Customer resource contained in the Location header.

Request and response

POST https://api-sandbox.dwolla.com/customers
Content-Type: application/vnd.dwolla.v1.hal+json
Accept: application/vnd.dwolla.v1.hal+json
Authorization: Bearer 0Sn0W6kzNic+oWhDbQcVSKLRUpGjIdl/YyrHqrDDoRnQwE7Q

{
    "firstName": "Jane",
    "lastName": "Merchant",
    "email": "mybusiness@email.com",
    "ipAddress": "143.156.7.8",
    "type": "business",
    "address": {
        "address1": "99-99 33rd St",
        "city": "Some City",
        "state": "NY",
        "postalCode": "11101"
    },
    "controller": {
        "firstName": "John",
        "lastName": "Controller",
        "title": "CEO",
        "ssn": "6789",
        "dateOfBirth": "1980-01-31",
        "address": {
            "address1": "1749 18th st",
            "address2": "apt 12",
            "city": "Des Moines",
            "stateProvinceRegion": "IA",
            "postalCode": "50266",
            "country": "US"
        }
    },
    "businessClassification": "9ed3f670-7d6f-11e3-b1ce-5404a6144203",
    "businessType": "llc",
    "businessName":"Jane Corp",
    "ein":"00-0000000"
}

HTTP/1.1 201 Created
Location: https://api-sandbox.dwolla.com/customers/62c3aa1b-3a1b-46d0-ae90-17304d60c3d5
Coming soon
# Using DwollaV2 - https://github.com/Dwolla/dwolla-v2-ruby (Recommended)
request_body = {
  :firstName => 'Jane',
  :lastName => 'Merchant',
  :email => 'janeMerchant@email.com',
  :type => 'business',
  :address => {
    :address1 => '99-99 33rd St',
    :city => 'Some City',
    :state => 'NY',
    :postalCode => '11101'
},
  :controller => {
      :firstName => 'John',
      :lastName => 'Controller',
      :title => 'CEO',
      :dateOfBirth => '1980-01-31',
      :ssn => '1234',
      :address => {
        :address1 => '1749 18th st',
        :address2 => 'apt 12',
        :city => 'Des Moines',
        :stateProvinceRegion => 'IA',
        :postalCode => '50266',
        :country => 'US',
      }
  },
  :businessClassification => '9ed38155-7d6f-11e3-83c3-5404a6144203',
  :businessType => 'llc',
  :businessName => 'Jane Corp',
  :ein => '12-3456789'
}

customer = app_token.post "customers", request_body
customer.response_headers[:location] # => "https://api-sandbox.dwolla.com/customers/62c3aa1b-3a1b-46d0-ae90-17304d60c3d5"
# Using dwollav2 - https://github.com/Dwolla/dwolla-v2-python (Recommended)
request_body = {
  'firstName': 'Jane',
  'lastName': 'Merchant',
  'email': 'janeMerchant@email.com',
  'type': 'business',
  'address': {
    'address1': '99-99 33rd St',
    'city': 'Some City',
    'state': 'NY',
    'postalCode': '11101'
  },
  'controller': {
      'firstName': 'John',
      'lastName': 'Controller',
      'title': 'CEO',
      'dateOfBirth': '1980-01-31',
      'ssn': '1234',
      'address': {
        'address1': '1749 18th st',
        'address2': 'apt12',
        'city': 'Des Moines',
        'stateProvinceRegion': 'IA',
        'postalCode': '50266',
        'country': 'US'
      }
  },
  'businessClassification': '9ed38155-7d6f-11e3-83c3-5404a6144203',
  'businessType': 'llc',
  'businessName': 'Jane Corp',
  'ein': '12-3456789'
}
customer = app_token.post('customers', request_body)
customer.headers['location'] # => 'https://api-sandbox.dwolla.com/customers/62c3aa1b-3a1b-46d0-ae90-17304d60c3d5'
var requestBody = {
  firstName: 'Jane',
  lastName: 'Merchant',
  email: 'janeMerchant@email.com',
  type: 'business',
  address: {
    address1: '99-99 33rd St',
    city: 'Some City',
    state: 'NY',
    postalCode: '11101'
  },
  controller: {
      firstName: 'John',
      lastName: 'Controller',
      title: 'CEO',
      dateOfBirth: '1980-01-31',
      ssn: '1234'
      address: {
        address1: '1749 18th st', 
        address2: 'apt 12',
        city: 'Des Moines',
        stateProvinceRegion: 'IA',
        postalCode: '50266',
        country: 'US',
      }
  },
  businessClassification: '9ed38155-7d6f-11e3-83c3-5404a6144203',
  businessType: 'llc',
  businessName: 'Jane Corp',
  ein: '12-3456789'
};
appToken
  .post('customers', requestBody)
  .then(res => res.headers.get('location')); // => 'https://api-sandbox.dwolla.com/customers/62c3aa1b-3a1b-46d0-ae90-17304d60c3d5'

Check the status of the business Customer

You have created a business verified Customer; however, the successful creation of a business verified Customer and Controller doesn’t necessarily mean the Customer is verified. Businesses may need to provide additional information to help verify their identity. It is important to immediately check the status of the business Customer to determine if additional documentation is needed.

Request and response

GET https://api-sandbox.dwolla.com/customers/62c3aa1b-3a1b-46d0-ae90-17304d60c3d5
Accept: application/vnd.dwolla.v1.hal+json
Authorization: Bearer pBA9fVDBEyYZCEsLf/wKehyh1RTpzjUj5KzIRfDi0wKTii7DqY

{
    "_links": {
        "deactivate": {
            "href": "https://api-sandbox.dwolla.com/customers/62c3aa1b-3a1b-46d0-ae90-17304d60c3d5",
            "type": "application/vnd.dwolla.v1.hal+json",
            "resource-type": "customer"
        },
        "self": {
            "href": "https://api-sandbox.dwolla.com/customers/62c3aa1b-3a1b-46d0-ae90-17304d60c3d5",
            "type": "application/vnd.dwolla.v1.hal+json",
            "resource-type": "customer"
        },
        "receive": {
            "href": "https://api-sandbox.dwolla.com/transfers",
            "type": "application/vnd.dwolla.v1.hal+json",
            "resource-type": "transfer"
        },
        "edit-form": {
            "href": "https://api-sandbox.dwolla.com/customers/62c3aa1b-3a1b-46d0-ae90-17304d60c3d5",
            "type": "application/vnd.dwolla.v1.hal+json; profile=\"https://github.com/dwolla/hal-forms\"",
            "resource-type": "customer"
        },
        "edit": {
            "href": "https://api-sandbox.dwolla.com/customers/62c3aa1b-3a1b-46d0-ae90-17304d60c3d5",
            "type": "application/vnd.dwolla.v1.hal+json",
            "resource-type": "customer"
        },
        "funding-sources": {
            "href": "https://api-sandbox.dwolla.com/customers/62c3aa1b-3a1b-46d0-ae90-17304d60c3d5/funding-sources",
            "type": "application/vnd.dwolla.v1.hal+json",
            "resource-type": "funding-source"
        },
        "transfers": {
            "href": "https://api-sandbox.dwolla.com/customers/62c3aa1b-3a1b-46d0-ae90-17304d60c3d5/transfers",
            "type": "application/vnd.dwolla.v1.hal+json",
            "resource-type": "transfer"
        },
        "send": {
            "href": "https://api-sandbox.dwolla.com/transfers",
            "type": "application/vnd.dwolla.v1.hal+json",
            "resource-type": "transfer"
        }
    },
    "id": "62c3aa1b-3a1b-46d0-ae90-17304d60c3d5",
    "firstName": "Jane",
    "lastName": "Merchant",
    "email": "janeMerchant@email.com",
    "type": "business",
    "status": "verified",
    "created": "2017-12-11T15:17:44.683Z",
    "address1": "99-99 33rd St",
    "city": "Some city",
    "state": "NY",
    "postalCode": "11101",
    "businessName": "Jane Corp"
}
<?php
$customerUrl = 'https://api-sandbox.dwolla.com/customers/62c3aa1b-3a1b-46d0-ae90-17304d60c3d5';

$customersApi = new DwollaSwagger\CustomersApi($apiClient);

$customer = $customersApi->getCustomer($customerUrl);
$customer->status; # => "verified"
?>
# Using DwollaV2 - https://github.com/Dwolla/dwolla-v2-ruby (Recommended)
customer_url = 'https://api-sandbox.dwolla.com/customers/62c3aa1b-3a1b-46d0-ae90-17304d60c3d5'

customer = app_token.get customer_url
customer.status # => "verified"
# Using dwollav2 - https://github.com/Dwolla/dwolla-v2-python (Recommended)
customer_url = 'https://api-sandbox.dwolla.com/customers/62c3aa1b-3a1b-46d0-ae90-17304d60c3d5'

customer = app_token.get(customer_url)
customer.body['status']
var customerUrl = 'https://api-sandbox.dwolla.com/customers/62c3aa1b-3a1b-46d0-ae90-17304d60c3d5';

appToken
  .get(customerUrl)
  .then(res => res.body.status); // => 'verified'

You will want to ensure that both your Controller and your Business have been verified, as the Customer will be unable to send or receive funds until then. If your controller or the business is in retry or document, head to our next article to learn how to handle this status.


Next steps


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.