Dwolla Developers Logo
Back
Guides
  • 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
JavaScript
Get API Keys

Step 4: Initiating a Transfer #

Sending funds from the Customer’s checking account to their savings account.

Identify Source and Destination For Transfer #

The first step is to determine where the funds are being sourced from and where the funds are going to.

  • Source - Your Customer’s Checking Bank Funding Source
  • Destination - Your Customer’s Savings Bank Funding Source

Since you are utilizing a me-to-me funds flow, you will need to know that there are two parts to a transfer,

  • Source funding source to Balance funding source
  • Balance funding source to Destination funding source

Step 4A: Initiate a Transfer #

To initiate a transfer, we will need to specify the source and destination funding source URLs in the _links parameter.

Request Parameters

ParameterRequiredTypeDescription_linksyesobjectA _links JSON object describing the desired source and destination of a transfer. Reference the Source and Destination object to learn more about possible values for source and destination.amountyesobjectAn amount JSON object. Reference the amount JSON object to learn more.
Info
Within a transfer request, Dwolla supports additional optional parameters. These can range from clearing to specify the processing timing for the transfer, or correlationId to help correlate transfers from end-to-end. The object facilitator-fee isn't supported for this funds flow. For more information on all available transfer request parameters, check out our API reference documentation.

Request and response (view schema in ‘raw’)

JavaScript
var transferRequest = {
  _links: {
    source: {
      href:
        "https://api-sandbox.dwolla.com/funding-sources/707177c3-bf15-4e7e-b37c-55c3898d9bf4",
    },
    destination: {
      href:
        "https://api-sandbox.dwolla.com/funding-sources/3152c22b-3d72-442d-a83b-e575df3a043e",
    },
  },
  amount: {
    currency: "USD",
    value: "225.00",
  },
};

appToken.post("transfers", transferRequest).then(function (res) {
  res.headers.get("location"); // => 'https://api-sandbox.dwolla.com/transfers/81643da1-b1b3-e911-811b-f08aa77f5aa3'
});

When the transfer 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 transfer resource. We recommend storing this URL or the transferId for future use.

Step 4B: Handle Webhooks #

If you have an active webhook subscription (required in production & optional in Sandbox), you will receive the customer_bank_transfer_created webhook immediately after the transfer resource has been created. This denotes that the first part of the transfer has been initiated from the checking bank funding source to the Balance funding source.

Step 4C: Simulate Bank Transfer Processing #

To simulate bank transfer processing in the Dwolla Sandbox environment, navigate to the Sandbox Dashboard. From here, you will want to click the “Process Bank Transfers” button on the top of the screen. Your Sandbox transfer will be moved out of a pending status and moved to a processed status.

process bank transfers

Production bank transfer processing timing

While pending bank transfers can be processed at any time in the Sandbox, behavior will vary in production depending on if your application has access to expedited transfers versus standard ACH transfer times. Refer to our developer resource article to learn more on transfer timing in production.

Step 4D: Handle Webhooks #

If you have an active webhook subscription (required in production & optional in Sandbox), you will receive the customer_bank_transfer_completed webhook when the status of the first part of the transfer has changed from pending to processed. The second part of the transfer is then automatically initiated from the Balance funding source to the savings bank funding-source which triggers another customer_bank_transfer_created webhook. Repeat Step 4C to simulate bank transfer processing again. Once the transfer has cleared into the final destination bank funding source, you will receive another customer_bank_transfer_completed webhook denoting that the transfer is now complete.

Step 4E: Verify Status of Transfer #

Since ACH transfers in production can take a few days to complete, webhooks are an efficient way to notify you of when a transfer’s status has been updated from pending to processed to a destination funding source. However, if you want to verify the status of a transfer at any given point in time, you can make a call to the API to retrieve the transfer by its unique id.

Example response for the first part of the transfer

json
{
  "_links": {
    "self": {
      "href": "https://api-sandbox.dwolla.com/transfers/81643da1-b1b3-e911-811b-f08aa77f5aa3",
      "type": "application/vnd.dwolla.v1.hal+json",
      "resource-type": "transfer"
    },
    "source": {
      "href": "https://api-sandbox.dwolla.com/funding-sources/707177c3-bf15-4e7e-b37c-55c3898d9bf4",
      "type": "application/vnd.dwolla.v1.hal+json",
      "resource-type": "funding-source"
    },
    "destination": {
      "href": "https://api-sandbox.dwolla.com/customers/cf3f1ad4-fc48-45d3-8aff-0ef5577b8a17",
      "type": "application/vnd.dwolla.v1.hal+json",
      "resource-type": "customer"
    },
    "funded-transfer": {
      "href": "https://api-sandbox.dwolla.com/transfers/a00ff82d-73b4-e911-811b-f08aa77f5aa3",
      "type": "application/vnd.dwolla.v1.hal+json",
      "resource-type": "transfer"
    }
  },
  "id": "81643da1-b1b3-e911-811b-f08aa77f5aa3",
  "created": "2019-08-01T15:32:05.620Z",
  "status": "processed",
  "amount": {
    "value": "225.00",
    "currency": "USD"
  },
  "individualAchId": "IQ8M922R"
}

Example response for the second part of the transfer

json
{
  "_links": {
    "self": {
      "href": "https://api-sandbox.dwolla.com/transfers/a00ff82d-73b4-e911-811b-f08aa77f5aa3",
      "type": "application/vnd.dwolla.v1.hal+json",
      "resource-type": "transfer"
    },
    "source": {
      "href": "https://api-sandbox.dwolla.com/customers/cf3f1ad4-fc48-45d3-8aff-0ef5577b8a17",
      "type": "application/vnd.dwolla.v1.hal+json",
      "resource-type": "customer"
    },
    "destination": {
      "href": "https://api-sandbox.dwolla.com/funding-sources/3152c22b-3d72-442d-a83b-e575df3a043e",
      "type": "application/vnd.dwolla.v1.hal+json",
      "resource-type": "funding-source"
    },
    "funding-transfer": {
      "href": "https://api-sandbox.dwolla.com/transfers/81643da1-b1b3-e911-811b-f08aa77f5aa3",
      "type": "application/vnd.dwolla.v1.hal+json",
      "resource-type": "transfer"
    }
  },
  "id": "a00ff82d-73b4-e911-811b-f08aa77f5aa3",
  "created": "2019-08-01T15:44:06.290Z",
  "status": "processed",
  "amount": {
    "value": "225.00",
    "currency": "USD"
  },
  "individualAchId": "IQKBPJAY"
}

Test in the Sandbox for free today.

Use sandbox environment to test API requests.

Get API Keys
2021 All Rights Reserved

Dwolla

  • 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.