To transfer money with Moov, you’ll need to link a bank account to your Moov account, then verify that account. You can link a bank account to a Moov account by adding the bank account number and routing number to the account object. We require micro-deposit verification to reduce the risk of fraud or unauthorized activity. You can verify a bank account by initiating instant micro-deposits, which sends a code to a bank account. Alternatively, you can link and verify a bank account in one step through an instant account verification token from a third party provider like Plaid.

## Add bank account

Link a bank account to an existing Moov account.

To link a bank account, you'll need to specify the `/accounts/{accountID}/bank-accounts.write` scope when generating a token.

**Parameters**

| Name        | Type   |
|-------------|--------|
| `accountID`| string |

Ask

```javascript
const accountID = "accountID";
const bankAccount = {
  "holderName": "Jules Jackson",
  "holderType": "individual",
  "accountNumber": "0004321567000",
  "bankAccountType": "checking",
  "routingNumber": "123456789"
};
moov.accounts.bankAccounts.link({accountID, bankAccount});
```

Ask

```javascript
const accountID = "accountID";
moov.accounts.bankAccounts.link({accountID, plaid: { token: "token"}});
```

Read more on setting up a [Moov managed Plaid integration](https://docs.moov.io/moovjs/sources/bank-accounts/plaid-link/)

## List bank accounts

List all the bank accounts associated with a particular Moov account.

To list bank accounts, you'll need to specify the `/accounts/{accountID}/bank-accounts.read` scope when generating a token.

**Parameters**

| Name        | Type   |
|-------------|--------|
| `accountID`| string |

Ask

```javascript
const accountID = "accountID";
moov.accounts.bankAccounts.list({accountID});
```

## Get bank account

Retrieve bank account details (routing number or account type) associated with a specific Moov account.

To retrieve bank account details, you'll need to specify the `/accounts/{accountID}/bank-accounts.read` scope when generating a token.

**Parameters**

| Name        | Type   |
|-------------|--------|
| `accountID`| string |

Ask

```javascript
const accountID = "accountID";
moov.accounts.bankAccounts.get({accountID});
```

## Disable bank account

Discontinue using a specified bank account linked to a Moov account.

To delete a bank account, you'll need to specify the `/accounts/{accountID}/bank-accounts.write` scope when generating a token.

**Parameters**

| Name        | Type   |
|-------------|--------|
| `accountID`| string |

Ask

```javascript
const accountID = "accountID";
moov.accounts.bankAccounts.delete({accountID});
```

## Initiate instant micro-deposits verification

Verification helps confirm bank account ownership, reducing fraud and risk of unauthorized activity. Use this method to initiate instant micro-deposits, which sends a 4-digit numeric code and a $0.01 credit to the bank account. The code will be in the form of `MV0000`, `mv0000`, or `0000`. If instant micro-deposits verification is not available at the participating bank, the fallback is same-day ACH.

To initiate, you'll need to specify the `/accounts/{accountID}/bank-accounts.write` scope when generating a token.

**Parameters**

| Name            | Type   |
|-----------------|--------|
| `accountID`    | string |
| `bankAccountID`| string |

Ask

```javascript
const accountID = "accountID";
const bankAccountID = bankAccountID;
moov.accounts.bankAccounts.startVerification({accountID, bankAccountID});
```

If you choose to request [standard micro-deposit](https://docs.moov.io/api/sources/bank-accounts/initiate-micro-deposits/) verification, be aware of the following timelines. Before 4:00 PM ET, micro-deposits will appear the same day. After 4:00 PM ET micro-deposits will appear the next banking day.

## Check instant micro-deposit verification

You can track instant bank account verifications. The response includes whether the verification method was instant or same-day ACH, as well as exception details.

Ask

```javascript
const accountID = "accountID";
const bankAccountID = bankAccountID;
moov.accounts.bankAccounts.getVerification({accountID, bankAccountID});
```

The status indicates the following:

- `new`: Verification initiated, credit pending to the payment network.
- `sent-credit`: Credit sent, available for verification.
- `failed`: Verification failed, description provided, user needs to add a new bank account.
- `expired`: Verification expired after 14 days, initiate another verification.
- `max-attempts-exceeded`: Five incorrect code attempts exhausted, initiate another verification.

## Complete instant micro-deposit verification

Complete the instant micro-deposit verification process by passing the code sent to the bank account.

You'll need to specify the `/accounts/{accountID}/bank-accounts.write` scope when generating a token.

#### Parameters

| Name            | Type   |
|-----------------|--------|
| `accountID`    | string |
| `bankAccountID`| string |
| `code`         | string |

Ask

```javascript
const accountID = "accountID";
const bankAccountID = bankAccountID;
moov.accounts.bankAccounts.completeVerification({accountID, bankAccountID, code});
```
