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 methodAPI nameAction
POSTAdd Funding InstrumentAdd 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.
POSTConfirm Funding InstrumentUse 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.
GETGet Funding Instrument DetailsGet 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.
GETGet Funding Instrument ListGet the list of funding instruments registered with your customer. It's optional to use this API.
POSTFund WalletFund 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:

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 methodAPI nameAction
POSTAdd Funding InstrumentAdd 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.
GETGet Funding Instrument DetailsGet 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.
GETGet Funding Instrument ListGet the list of funding instruments registered with your customer. It's optional to use this API.
POSTFund WalletFund 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
  1. Call the Add Funding Instrument API to add your customer’s bank account.
  2. The API returns a return URL that lets you redirect the customer to the Plaid page.
  3. The customer chooses their bank account to add funds through Plaid and completes the authentication.
  4. Nium returns the funding instrument ID.
  5. Call the Fund Wallet API to pull funds into the wallet with the correct funding instrument ID.
  6. Your customer’s bank account is debited.
  7. Nium initiates compliance checks and, after a predetermined time, credits the money to your customer’s wallet.
  8. If the customer raises a chargeback, Nium manages the chargeback according to the terms and conditions agreement.
A diagram showing the instant verification Direct Debit flow.

A diagram showing the Direct Debit instant verification flow.

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 methodAPI nameDescription
POSTAdd Funding InstrumentAdd 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.
POSTConfirm Funding Instrument IDUse 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.
GETGet Funding Instrument DetailsGet 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.
GETGet Funding Instrument ListGet the list of funding instruments registered with your customer. It's optional to use this API.
POSTFund WalletFund 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
  1. Call the Add Funding Instrument API to add your customer’s bank account.
  2. The API returns a return URL that lets you redirect the customer to the Plaid page.
  3. 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.

  1. 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.
  2. After receipt of the webhook, you send a notification to your customer, and you call the Confirm Funding Instrument ID API
  3. The API returns a return URL that lets you redirect the customer to the Plaid page again.
  4. Your customer enters the three-letter verification code received in their account statement.
  5. If the code matches, Nium saves the funding instrument or declines otherwise.
  6. Your customer is redirected to your website.
  7. Call the Fund Wallet API to pull funds into the wallet with the correct funding instrument ID.
  8. Your customer’s bank account is debited.
  9. Nium initiates compliance checks and, after a predetermined time, credits the money to your customer’s wallet.
  10. If the customer raises a chargeback, Nium manages it according to the T&C agreement.
A diagram showing the Direct Debit micro-deposit verification flow.

A diagram showing the Direct Debit micro-deposit verification flow.

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

The settlement cutoff time for payments is 15:15 EST (19:15 GMT). Payments processed after this time will be processed the next business day. If you have any questions, please contact Nium support.

A diagram showing the settlement timing for ACH Direct Debit, which takes the standard three days.

A diagram showing the settlement timing for ACH Direct Debit, which takes the standard three days.

A faster settlement time option is available to eligible clients after a risk assessment from Nium. Reach out to your Nium account manager or Nium support for more information..