Direct Debit US
Nium One clients in the United States can accept Automated Clearing House (ACH) Direct Debit payments from business customers with a US bank account.
You can use ACH Direct Debit as many times as you want. Direct Debit is a non-real-time payment method from payment creation to processing and acknowledgment of its success or failure.
For more information, see Direct Debit.
Prerequisites
The prerequisites for Direct Debit include:
- Your customer needs to have a bank account in the US with Direct Debit ACH enabled and a Nium USD wallet.
- Your customer needs to have sufficient balance in the added bank account before the payment is initiated, for example, when you call the Fund Wallet API.
- Your customer needs to authorize the Direct Debit mandate to debit their bank account and accept Nium's Terms and Conditions (T&C).
- Your customer's bank account, to be added to the Nium wallet, needs to be verified.
- Your customer needs to be a corporate customer.
Verify and Link External Bank Accounts
Before you can directly debit funds, you first need to verify and link the external bank account. There are several ways to authenticate US bank accounts:
Micro-deposits through Nium offers more customization compared to Plaid's offering, enabling you to control the entire branding of the customer's experience.
NOTE
Micro-deposits thorugh Nium is currently in early access and subject to further changes. For more information, reach out to you Nium account manager or the Nium Support Team.
Nium
To link your customer’s account with micro-deposits through Nium, first, prompt the customer to enter their bank account details, including the bank account number and routing number.
Similar to how Plaid uses micro-deposits to verify bank accounts, your customer should expect to see, within two days, two deposits for random amounts. (less than $1.00) in the bank account they initially entered.
The customer's bank account is verified after they provide the exact micro-deposit amounts. Once verified, the bank account is ready to be linked to to customer's Nium Account and initiate Direct Debits.
Nium API - Micro-deposits
To authenticate a bank account using micro-deposits through Nium:
Step 1: Create a Bank Account Verification
Create a bankAccount
resource and include the bank account details provided by the customer.
curl --location --request POST 'https://gateway.nium.com/api/v1/client/{clientHashId}/customer/{customerHashId}/bankAccounts' \
--header 'x-api-key: X-API-KEY' \
--header 'Content-Type: application/json' \
--data-raw '{
"country": "US",
"currency": "USD",
"accountNumber": "000987654321",
"routingCodes": [
{
"type": "ach_code",
"value": "111000000"
}
],
"authenticationType": "microdeposit_amounts",
"isCustomerAccount": true
}'
Response Example
{
"bankAccountId": "41150875-f86d-462e-b865-ded85fbxxxxx",
"accountNumber": "000987654321",
"routingCodes": [
{
"type": "ach_code",
"value": "111000000"
}
],
"country": "US",
"currency": "USD",
"verification": "in_progress",
"authentication": "in_progress",
"authenticationType": "microdeposit_amounts",
"isCustomerAccount": true,
"createdAt": "2024-04-11T21:45:15Z",
"updatedAt": "2024-04-11T21:45:16Z"
}
The customer can expect to see two micro-deposits within two business days. The bankAccount
resource includes:
bankAccount#verification
: Details the status of Nium's attempt to verify the bank account details.bankAccount#authentication
Details the status of Nium's attempt to verify account ownership by authenticating the variable micro-deposit amounts.
Step 2: Create a Funding Instrument
Using the bankAccountId
, create a Funding Instrument
for the customer's bank account. The Funding Instrument
represents the customer's bank account and is used in different requests throughout Nium's API.
curl --location --request POST 'https://gateway.nium.com/api/v2/client/{clientHashId}/customer/{customerHashId}/wallet/{walletHashId}/fundingInstruments' \
--header 'x-api-key: X-API-KEY' \
--header 'Content-Type: application/json' \
--data-raw '{
"bankAccountId": "{bankAccountId}"
}'
Response Example
{
"fundingInstrumentId": "3041f7a3-3934-411b-835b-e6f4283xxxxx",
"bankAccountId": "514db54d-ad3a-47da-9ad4-71558dcxxxxx",
"country": "US",
"currency": "USD",
"maskedAccountNumber": "XXXXXXXX4321",
"routingCodes": [
{
"type": "ACH_CODE",
"value": "111000000"
}
],
"status": "PENDING",
"createdAt": "2024-04-12T13:35:25Z"
}
Optional: Simulate the Customer Verification
Use this request to simulate the customer submitting the amounts of the micro-deposits.
curl --location 'https://gateway.nium.com/api/v1/simulations/client/{clientHashId}/customer/{customerHashId}/bankAccounts/{bankAccountId}/microDeposits' \
--header 'x-api-key: X-API-KEY'
Response Example
{
"amounts": [0.42, 0.14]
}
Step 3: Verify Bank Account
Authenticate the amounts
provided by the customer.
curl --location --request POST 'https://gateway.nium.com/api/v1/client/{clientHashId}/customer/{customerHashId}/bankAccounts/{bankAccountId}/confirm' \
--header 'x-api-key: X-API-KEY' \
--header 'Content-Type: application/json' \
--data-raw '{
"amounts": [0.42, 0.14]
}'
Response Example
{
"bankAccountId": "41150875-f86d-462e-b865-ded85fbxxxxx",
"accountNumber": "000987654321",
"routingCodes": [
{
"type": "ach_code",
"value": "111000000"
}
],
"country": "US",
"currency": "USD",
"verification": "completed",
"authentication": "completed",
"authenticationType": "microdeposit_amounts",
"isCustomerAccount": true,
"createdAt": "2024-04-11T21:45:15Z",
"updatedAt": "2024-04-12T13:34:13Z"
}
If the amounts provided are accurate, bankAccount#authentication
gets updated to completed and the bankAccount
is now verified to initiate Direct Debits.
Step 4: Fetch the Funding Instrument
If the fundingInstrument
was created before the bankAccount#authentication
was completed, you'll see bankAccount#verification
update to completed and fundingInstrument#status
update to APPROVED within milliseconds of bankAccount#authentication
updating to completed.
Get the fundingInstrument
details to verify the status
has updated to APPROVED and is ready to use.
curl --location 'https://gateway.nium.com/api/v1/client/{clientHashId}/customer/{customerHashId}/fundingInstruments/{fundingInstrumentId}/fundingInstrumentDetails' \
--header 'x-api-key: X-API-KEY'
Response Example
{
"bankName": "US Bank",
"fundingInstrumentId": "7ac4bc1f-3e81-4766-a908-6231ddd79531",
"fundingChannel": "DIRECT_DEBIT",
"clientHashId": "94c15268-41fb-4518-8191-a4f7feed17a5",
"customerHashId": "8fdc1fd6-3e2c-41f2-9d25-19a7056b60f5",
"walletHashId": "fd25a7d3-e8d7-4379-b5a9-e8044d492cae",
"saved": true,
"status": "APPROVED",
"statusDescription": "SUCCESS",
"maskedAccountNumber": "XXXXXXXXXXXX1111",
"routingType": "ACH CODE",
"routingValue": "011401533",
"country": "US",
"currency": "USD",
"createdAt": "2023-01-02 12:21:52",
"updatedAt": "2023-01-02 12:27:00"
}
Based on your business needs, this micro-deposit flow can be altered so bank accounts are verified before the fundingInstrument
is created. To do so Verify the Bank Account before Creating the Funding Instrument`. This ensures fundingInstruments
are only created for bankAcounts
with authentication
completed.
Direct Debit - Nium Micro-deposit Verification Endpoints
The following APIs support Direct Debit instant verification:
HTTP method | API name | Action |
---|---|---|
POST | Add Funding Instrument | Add the funding instrument to your customer's wallet to start a Direct Debit transaction. Use this API to add the payer's physical bank account to the customer's wallet so that Direct Debit payments can be initiated against it. Provide the funding instrument's country code and currency code. |
POST | Confirm Funding Instrument | Use this API to confirm the payer's physical bank account against your customer's wallet so that Direct Debit payments can be initiated against it. |
GET | Get Funding Instrument Details | Get your customer's funding instrument details for a specific funding instrument ID. This API is optional. The fundingInstrumentId is returned as a response in the Add Funding Instrument API call. |
GET | Get Funding Instrument List | Get the list of funding instruments registered with your customer. It's optional to use this API. |
POST | Fund Wallet | Fund into your customer's wallet by selecting the funding channel as a direct_debit transaction. You also need to provide the fundingInstrumentId obtained from the response in the Add Funding Instrument API call. |
Plaid
Nium's integration with Plaid is also available for you to verify your customer's bank account. Our integration with Plaid offers Instant or Micro-deposit verification.
When verifying bank accounts with Plaid, your customers get redirected to a web page from Plaid at the return_url
. On this page, your customers choose how to verify their bank account (Instant or Micro-deposit) and follow Plaid's experience to complete verification.
The return_url
is available in the response of the following requests:
- For Instant verification, see Add Funding Instrument.
- For Micro-deposit verification, see Confirm Funding Instrument.
Plaid - Instant Verification
To link your customer's bank account to use Direct Debit via instant verification, redirect customers from your website to the Plaid website to authorize the connection.
To link bank accounts for customers who choose Instant Verification, redirect customers from your website or application to Plaid's website to authorize the connection.
Then, on Plaid's website, customers select the bank that holds their account and get redirected to the bank's website to complete authentication and verification.
Direct Debit - Plaid Instant Verification Endpoints
The following APIs support Direct Debit instant verification:
HTTP method | API name | Action |
---|---|---|
POST | Add Funding Instrument | Add the funding instrument to your customer's wallet to start a Direct Debit transaction. Use this API to add the payer's physical bank account to the customer's wallet so that Direct Debit payments can be initiated against it. Provide the funding instrument's country code and currency code. |
GET | Get Funding Instrument Details | Get your customer's funding instrument details for a specific funding instrument ID. It's optional to use this API. The fundingInstrumentId is returned as a response in the Add Funding Instrument API call. |
GET | Get Funding Instrument List | Get the list of funding instruments registered with your customer. It's optional to use this API. |
POST | Fund Wallet | Fund into your customer's wallet by selecting the funding channel as a direct_debit transaction. You also need to provide the fundingInstrumentId obtained from the response in the Add Funding Instrument API call. |
Payment flow
- Call the Add Funding Instrument API to add your customer’s bank account.
- The API returns a return URL that lets you redirect the customer to the Plaid page.
- The customer chooses their bank account to add funds through Plaid and completes the authentication.
- Nium returns the funding instrument ID.
- Call the Fund Wallet API to pull funds into the wallet with the correct funding instrument ID.
- Your customer’s bank account is debited.
- Nium initiates compliance checks and, after a predetermined time, credits the money to your customer’s wallet.
- If the customer raises a chargeback, Nium manages the chargeback according to the terms and conditions agreement.
Plaid - Micro-deposits
To link your customer's bank account to use Direct Debit via micro-deposit verification, they must be redirected from your website to the Plaid website to authorize the connection. Your customer then provides the bank account details to be linked. They then authorize Nium to send a $0.01 micro-deposit to their bank account with a three-letter code that appears in their statement. Your customer authorizes the micro-deposit by entering the code.
IMPORTANT
Micro-deposits are not sent in real-time and can take two business days to appear on your customer's bank statement.
Direct Debit - Plaid Micro-deposit Verification Endpoints
The following APIs support Direct Debit micro-deposit verification:
HTTP method | API name | Description |
---|---|---|
POST | Add Funding Instrument | Add the funding instrument to your customer's wallet to start a Direct Debit transaction. Use this API to add the payer's physical bank account to the customer's wallet so that Direct Debit payments can be initiated against it. Provide the funding instrument's country code and currency code. |
POST | Confirm Funding Instrument ID | Use this API to confirm the payer's physical bank account against your customer's wallet so that Direct Debit payments can be initiated against it. |
GET | Get Funding Instrument Details | Get your customer's funding instrument details for a specific funding instrument ID. It's optional to use this API. The fundingInstrumentId is returned as a response in the Add Funding Instrument API call. |
GET | Get Funding Instrument List | Get the list of funding instruments registered with your customer. It's optional to use this API. |
POST | Fund Wallet | Fund into your customer's wallet by selecting the funding channel as a direct_debit transaction. You also need to provide the fundingInstrumentId obtained from the response in the Add Funding Instrument API call. |
TIP
To trigger micro-deposit scenarios in the sandbox environment, use the Simulate Funding Instrument Status Update (Sandbox Testing) API.
Payment flow
- Call the Add Funding Instrument API to add your customer’s bank account.
- The API returns a return URL that lets you redirect the customer to the Plaid page.
- If your customer chooses micro-deposit verification, they provide the details of their bank account to be linked, for example, their bank account number, routing code, account name, and account type. Nium then updates the funding instrument status as
Pending
and redirects the customer to the callback URL that you configured during the Direct Debit setup.
TIP
When your customer receives a micro-deposit, they see a $0.01 deposit. Their account statement shows the sender as Nium and has
ACCTVERFIY
mentioned in the record. They also receive a three-letter code in the#XYZ
format.
- You then receive a webhook notification Direct Debit Micro-Deposit Successful from Nium once the micro-deposit is sent to the customer account details provided in step 3.
- After receipt of the webhook, you send a notification to your customer, and you call the Confirm Funding Instrument ID API
- The API returns a return URL that lets you redirect the customer to the Plaid page again.
- Your customer enters the three-letter verification code received in their account statement.
- If the code matches, Nium saves the funding instrument or declines otherwise.
- Your customer is redirected to your website.
- Call the Fund Wallet API to pull funds into the wallet with the correct funding instrument ID.
- Your customer’s bank account is debited.
- Nium initiates compliance checks and, after a predetermined time, credits the money to your customer’s wallet.
- If the customer raises a chargeback, Nium manages it according to the T&C agreement.
URL Redirect Setup
After your customers complete authentication with Plaid, they're redirected to your website or application.
Keep your customers up to date on the verification status of their bank account on this website or application page by including the following during Direct Debit setup:
- Web page to redirect customers to
- Application URL
- Customer host
- Port
The following provides the format of the URL that'll be generated to redirect customers. It includes the fundingInstrumentId
that was created to represent the customer's bank account in Nium and the verification status
:
URL: GET
https://<customerHost:Port>?fundingInstrumentId={fundingInstrumentId}&status={status}
Funds Flow Timeline
The customer's bank has two business days after the day of the debit from their account to reverse the payment. Thus, the cooling-off period takes two business days.
IMPORTANT
A faster settlement time option is available to eligible clients after a risk assessment from Nium. Reach out to a Nium sales representative for more information.
Updated 5 months ago