Testing transfers webhooks


I’m testing making transfers (sandbox env) from an unverified customer with a verified funding source to a verified business user with an unverified funding source.

Success flow callbacks are:

  • customer_transfer_created (for business user)
  • customer_transfer_created (for customer)
  • customer_transfer_completed (for business user)
  • customer_transfer_completed (for customer)
  • customer_bank_transfer_creation_failed (for business user)

Can you tell me why I got customer_bank_transfer_creation_failed here?

Also is it sandbox fault that I’ve never got any of those callbacks when I was testing failure scenarios: customer_bank_transfer_created, customer_bank_transfer_failed, customer_bank_transfer_completed)

And the last thing - in a sandbox environment can I affect the money’s amount on a customer bank account - the one to be added and verified by Dwolla.js?

Hey @Michal_K, thanks for posting. The customer_bank_transfer_creation_failed event is less common in nature in relation to the overall transfer workflow. This event is triggered when Dwolla is unable to create an ACH credit to a recipients bank account. To provide some additional context, if the funds transfer is going to a Verified business Customer then they will pass through a balance before being credited to their attached bank account. A few examples where Dwolla would fail to “auto-withdraw” those funds can include:

  • A negative balance exists on the receiving Customer. (A negative balance can occur if this Customer record received an ACH return) (Did you test a Failure scenario which caused this balance to go negative?)
  • The receiving Customer is in an account state where they are unable to transfer funds. This can include if the Customer has a status other than verified such as document, deactivated, suspended, etc.

The sequence of events triggered will vary depending on when the ACH return occurred and the Customer types involved in the transaction. For more information on the events you may receive based on your funds flow, reference this gist. Also covered in this forum thread.

You should be able to transfer funds to/from an attached bank account regardless of the method used to add that bank (dwolla.js/IAV // via API // Plaid). You’ll just want to be sure that when sending funds the underlying bank account has a verified status.

Hope this helps, please let me know if I’m misunderstanding anything or if you have any follow up questions!

Yes, that was it, at least it pushed me in the right direction. I mean in the Dwolla dashboard the business customer was flagged as verified and what I miss was the two tiny little grayish boxes saying that I need to certify beneficial ownership. After doing so, it seems that I’m not getting customer_bank_transfer_creation_failed webhook when testing the success transfer process, which is nice. Thank you!

I went through your gist and I’m not sure I understand correctly the case scenarios there: Transfer scenario 2: Verified Customer As bank to Unverified Customer Cs bank
Does this mean eg unverified individual customer with verified funding source to verified business customer with unverified funding source? (I’m asking because I got confused after reading scenario 3 **Source:** Unverified Customer bank **Destination:** Verified Customer bank. Uncerified is related to Customer and not to bank right? I mean is it even possible to make a transfer from a verified customer with an unverified funding source?)

Sorry for bothering you, but because we’re dealing with customer’s money I’d like to fully understand the process here.

No problem! Beneficial ownership certification is another piece that will prevent that account type from transferring funds.

Sorry, I linked to the wrong scenario! You’ll want to refer to transfer scenario 3 as you have Unverified users sending to Verified users. Unverified vs. Verified is referring to the Customer type.

No worries on asking questions, this is one of the more complex/confusing components to an integration (Reconciling transactions based on transfer events).

I have one more question. I’m looking for the final webhook for success transfer - it seems to be customer_bank_transfer_created. But when testing failure scenarios (R01-late & R03-late) after customer_bank_transfer_created I got two more webhooks (customer_transfer_failed for individual and business customer).

So my question is can I rely on customer_bank_transfer_created webhook (very convenient) or rather log in to receiving bank account and see if the money from a transfer is there (not very convenient).

Or maybe there is another webhook that I can use or some other way?

Also is there a way to trigger customer_bank_transfer_failed on the sandbox env?

@Michal_K, There are two sides to every bank-to-bank transaction (ACH debit and credit). Im assuming that this event is being triggered when the source ACH debit is marked as processed in Dwolla? If so, that should kick off a secondary transaction to withdraw funds from the recipient’s balance (held in Dwolla) to their bank account. The customer_bank_transfer_created event should be followed by a customer_bank_transfer_completed event wherein that completion should be an indication that funds are in the receiving bank account.

What I would likely recommend is utilizing the funded-transfer and/or funding-transfer links returned on a Transfer resource to indicate what action your app needs to take, and to identify if the funds have reached their destination. Described in this forum thread. You could then do the following:

  • Store the transfer ID returned from the API when creating the transfer as well as a status (your own payment status).
  • When a transfer related event is triggered, follow the resource URL to do a GET /transfers/{id} to retrieve the status as well as determine if the transfer has created a a subsequent transfer (as indicated by the presence of the funded-transfer link). If funded-transfer link exists, follow that URL by making a GET /transfers/{id}. If there is no funded-transfer link and the status is processed then the lifecycle of the transaction is complete.

You should be able to test this for use case by setting the receiving Verified Customer’s attached funding source name to R03. Once that’s done, initiate a transfer and click the “Process bank transfers” button multiple times in the Sandbox Dashboard.

Thank you so much!