What are direct debits?
A direct debit is a request made to a bank account to take funds. This type of payment method is pulled from a bank account, rather than being pushed like an EFT or BPay payment are. In the US a Direct Debit is referred to as "ACH pull".
How do they work with the API?
To initiate a direct debit request on a given bank account, you must first have permission from the account holder in the form of a direct debit authority (DDA). Assembly has an API endpoint /direct_debit_authority to make this process easier.
Which countries are they supported in?
The Assembly direct debit API can be used on bank accounts in Australia, New Zealand and the United States. Direct debits are a domestic-only payment method and will not work on international bank accounts. For example, if your business is domiciled in Australia, you can't perform a direct debit on a US bank account.
In the United States, ACH payments are restricted to business bank accounts and won't work on personal bank accounts. In Australia and New Zealand, you can perform a direct debit on both business and personal bank accounts.
What is the timeframe for a DD?
In Australia and New Zealand a direct debit will take 2 business days to clear before funds are available to you in Assembly. If a direct debit fails, the time taken to get funds will increase the total payment time in your platform. In such a scenario you may wish to use faster payment methods like credit cards or BPay if available.
See the article on payment processing for more information.
What appears on my customer's bank statement?
Your customers will see something like the following in their bank account after a direct debit has been completed: PromisePay MyWidgets or Assembly MyWidgets, where MyWidgets is the name of your business.
Things to look out for.
When creating direct debit authority requests and attempting to initiate a payment from a bank account, there are a number of things that can cause the payment fail, including:
Incorrect bank account details. This is the most common error generated by direct debit requests and can be mitigated against in two ways. Firstly, have your users double-check their bank account details before submission to the Assembly API. Secondly, you can verify the bank account using Assembly's penny credit API.
Insufficient funds. At the time of the direct debit request being made, there were not enough funds to complete the transaction. This can happen primarily if there is not enough money in the account provided, but can also happen if multiple direct debit requests were made by multiple organisations on the bank account provided. For example, someone may have their phone bill, internet bill, gas bill and rent all taken from a bank account on the same day. Get your users to confirm they have the funds available before creating the request for payment, and if possible avoid providing goods or services until payment has been made.
Wrong account type. When creating the bank account record, if you pass "checking" when the account should have been "savings" this can cause the request to fail. Make sure your users verify the details of the bank account before creating the record via the API.
Accounts that block direct debit requests. Many online saver accounts offered by banks will not allow direct debits to be performed and such requests will generate an error. To avoid this from happening, make sure that when your users are adding a bank account they are providing an account which can be debited from.
Other banking errors. These type of errors often generate a "refer to customer" error from the person's bank which is an indication that something else has gone wrong with the bank account. Often, it is that an account is not available to be debited from (see directly above) or that for whatever reason the bank has blocked the debit request. In these situations, it is best to have your user contact their bank directly to identify what has gone wrong.
Developer documentation on the direct debits API.
For technical information on using direct debits with the Assembly API, the following developer articles can help get you started: