Sending funds from the Customer’s checking account to their savings account.
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 SourceDestination
- Your Customer’s Savings Bank Funding SourceSince you are utilizing a me-to-me
funds flow, you will need to know that there are two parts to a transfer,
To initiate a transfer, we will need to specify the source and destination funding source URLs in the _links
parameter.
Parameter | Required | Type | Description |
---|---|---|---|
_links | yes | object | A _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. |
amount | yes | object | An amount JSON object. Reference the amount JSON object to learn more. |
POST https://api-sandbox.dwolla.com/transfers
Accept: application/vnd.dwolla.v1.hal+json
Content-Type: application/vnd.dwolla.v1.hal+json
Authorization: Bearer pBA9fVDBEyYZCEsLf/wKehyh1RTpzjUj5KzIRfDi0wKTii7DqY
Idempotency-Key: 19051a62-3403-11e6-ac61-9e71128cae77
{
"_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": "10.00"
},
}
...
HTTP/1.1 201 Created
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.
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.
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.
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.
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.
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.
{
"_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"
}
{
"_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"
}
All funds transfers made using the Dwolla Platform are performed by a financial institution partner, and any funds held in a Dwolla Balance are held by a financial institution partner. Learn more about our financial institution partners.