Link bank accounts

Follow this step by step guide to link a bank account as a funding source with our API, SDKs, and Moov.js.

This guide covers how to link a bank account through Moov’s API, SDKs, and Moov.js. You can also use Plaid or MX to add and verify bank accounts. The instructions in this guide do not apply to bank accounts added or verified via Plaid or MX. See the associated Plaid or MX guides for instructions.

For detailed information on the verification process, see the instant micro-deposit guide.

The following bank account types are available:

  • checking
  • savings
  • loan
  • general-ledger (business holder type only)

Add bank account

The step by step examples below will show you how to link a bank account to a Moov account, as well as initiate and confirm instant micro-deposit verification.

Get accountID

Retrieve the accountID for the Moov account you want to link a bank account to.

List account reference

1
2
curl -X GET "https://api.moov.io/accounts" \
  -H "Authorization: Bearer {token}"

List account reference

1
2
3
mc, _ := moov.NewClient()

mc.ListAccounts(ctx)

List account reference

1
2
3
const moov = new Moov(credentialsObject);

moov.accounts.list();

For the purposes of this example, we are adding a bank account to an individual Moov account. If you are adding a bank account to a business Moov account, pass business as the holderType instead.

The response will include the bankAccountID which is required in the next steps to initiate and complete instant micro-deposit verification.

Link a bank account reference

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
curl -X POST "https://api.moov.io/accounts/{accountID}/bank-accounts" \
  -H "Authorization: Bearer {token}" \
  --data-raw '{
    "account": {
      "accountNumber": "0004321567000",
      "bankAccountType": "checking",
      "holderName": "Jules Jackson",
      "holderType": "individual",
      "routingNumber": "123456789"
    }
  }'\

Link a bank account reference

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
mc, _ := moov.NewClient()

var accountID string

mc.CreateBankAccount(ctx, accountID, moov.WithBankAccount(moov.BankAccountRequest{
  AccountNumber: "0004321567000",
  AccountType:   moov.BankAccountType_Checking,
  HolderName:    "Jules Jackson",
  HolderType:    moov.HolderType_Individual,
  RoutingNumber: "123456789",
}), moov.WaitForPaymentMethod())

Link a bank account reference

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
const moov = new Moov(credentialsObject);

const accountID = "accountID";
const bankAccountPayload = {
  bankAccount: {
    accountNumber: "0004321567000",
    bankAccountType: "checking",
    holderName: "Jules Jackson",
    holderType: "individual",
    routingNumber: "123456789"
  }
}

const response = await moov.bankaccounts.link(accountID, bankAccountPayload);

Link a bank account reference

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
const moov = Moov(token);

const accountID = "accountID";
const bankAccountPayload = {
  accountNumber: "0004321567000",
  bankAccountType: "checking",
  holderName: "Jules Jackson",
  holderType: "individual",
  routingNumber: "123456789"
};

moov.accounts.bankAccounts.link({accountID, bankAccountPayload});

Initiate instant micro-deposits

Initiate instant micro-deposits through Moov’s verify bank account POST endpoint. Moov will generate a 4-digit numeric code and send a $0.01 credit to the user’s bank account you’re verifying. The 4-digit code will appear as MV{code} on the user’s credit transaction descriptor. The user will have 14 days and five attempts to enter the verification code.

If you initiate verification for a bank account that is not RTP-enabled, Moov will automatically use ACH instead of RTP for verification. ACH verification is not instant.

If needed, you can retrieve the bankAccountID from the list bank accounts GET endpoint.

Initiate micro-deposits reference

1
2
curl -X POST "https://api.moov.io/accounts/{accountID}/bank-accounts/{bankAccountID}/verify" \
  -H "Authorization: Bearer {token}" \

Check instant micro-deposits

You can check the status of instant micro-deposit verification through the GET endpoint. The response will include if the verification is instant or same-day ACH, as well as the status.

Check micro-deposits reference

1
2
curl -X GET "https://api.moov.io/accounts/{accountID}/bank-accounts/{bankAccountID}/verify" \
  -H "Authorization: Bearer {token}" \

Complete instant micro-deposits

To complete the verification process, provide the 4-digit code using the verify bank account PUT endpoint. You’ll receive a 2XX response if the correct code is provided. If an incorrect code is submitted, the response will indicate the attempt’s status as incorrect.

Complete micro-deposits reference

1
2
3
4
5
curl -X PUT "https://api.moov.io/accounts/{accountID}/bank-accounts/{bankAccountID}/verify" \
  -H "Authorization: Bearer {token}" \
  --data-raw '{
    "code":"MV1234"
  }'\

Manage bank accounts

List all bank accounts using the list bank accounts GET endpoint. You can also get an individual account by passing the accountID to the retrieve a bank account GET endpoint.

Bank accounts can be deleted by passing the accountID to the delete a bank account DEL endpoint.

A bank account might fail verification during the micro-deposit process. See the bank account status guide for verification failure instructions, as well as general status information.

Next steps

Summary Beta