Test mode

Simulate account and transfer scenarios on Moov’s platform without using real money.

Moov has pre-populated your test account with sample business details and accounts. You aren’t required to enter anything for your test account to receive the verified status. In test mode, requirements for all capabilities have been satisfied, so they are automatically enabled for you. You’ll have full access to the following capabilities:

While you don’t need to request capabilities for test mode, for production mode, you’ll need to request capabilities. You can do this at the same time you create your account, or request additional capabilities later.

Switch to test mode

After you’ve completed your business profile and Moov has approved your production account, you can switch between production and test mode in the Moov Dashboard by using the Account dropdown in the upper left hand corner.

Toggle for test account in Moov Dashboard

Invite team members

Use the account switcher in the Moov Dashboard to switch to test mode. While in test mode, you can invite team members to your test account. Inviting team members to your test account does not enable them to use your production account. If you’d also like to invite team members to your production account, you will need to do that separately in production mode.

API keys

You will need to create an API key specific to the test account. We suggest naming the API key something that will help you remember that it’s for testing purposes.

You can use localhost, ngrok, Netlify, or Vercel domains for these keys.

Create API key for test account modal in Moov Dashboard

Name verification

The card link POST endpoint and PATCH endpoint offer an optional verifyName field, which uses Visa’s ANI verification as a check against the supplied holderName. You can test the various results by entering the following combinations of correct and incorrect names in the holderName field.

Correct name: Alex Nora Irwin

Name entered Individual name check Full name check
“Alex Nora Irwin” match, match, match match
“Alex Noraa Irwin” match, partialMatch, match match
“Alx Nora Irwin” partialMatch, match, match match
“Alex Irwin” match, notChecked, match match
“Irwin” notChecked, notChecked, match match
“Alex Nor Irwin” match, noMatch, match partialMatch
“Axely Nora Irwin” noMatch, match, match partialMatch
“A N Irwi” noMatch, noMatch, partialMatch noMatch
“Alex Notwin” match, notChecked, noMatch noMatch
“Alex Notwin” match, notChecked, noMatch noMatch

If ANI is not supported, you’ll receive unavailable for all results.

Transfers

Transfers in test mode won’t move any real money. For the timing of transfers in test mode, note that:

  • Wallet to wallet transfers complete almost instantly
  • ACH transfers in test mode will complete in about an hour (see the processing speed guide for production mode)

If you would like to see how Moov handles failures in production, view the transfer failures guide.

To simulate card transfers and transfer scenarios, like disputes, use the test cards and other specific data listed in the following sections. Use the test cards with the create a transfer POST endpoint, using any amount, unless otherwise specified.

Before you can use test cards in transfer scenarios, you will have to link them to your test account. Use the link a card POST endpoint with any of the test cards, providing any 3 numbers for the CVV (4 for American Express) and any future date for the expiration date. You can also use any postal code to satisfy the required billing postalCode field.

Card acceptance

We only support specific test cards for simulating card transfers. The expiration date field for all test cards can be set to any future date.

To simulate card transfers, use the following card numbers:

Card brand Test card number CVV
Visa 4111111111111111 Any 3 numbers
Mastercard 5555555555554444 Any 3 numbers
Discover 6011111111111117 Any 3 numbers
American Express 371111111111114 Any 4 numbers

RTP

To simulate an RTP transfer in test mode, create a transfer with moov-wallet as the source payment method and rtp-credit as the destination. The rtp-credit payment method will only appear for bank accounts with routing numbers that are RTP eligible.

Use 021000021 as an RTP-enabled routing number in test mode.

You can also simulate various RTP failures and rejections by using these specific amounts listed below in your test mode transfers. Using these amounts will result in real time failures. Please note that these failures will result in the linked bank account entering an errored state.

Transfer amount Failure type
$72.03 AC03 / invalid-account
$72.04 AC04 / account-closed
$72.06 AC06 / account-blocked

If you would prefer to use the API to simulate a failure, you can trigger the RTP failure in test mode by entering any of the return amount codes as the value. For example, if you wanted to simulate an invalid account, enter 7703 as the value.

1
2
3
4
5
6
7
8
9
{
  "amount": {
    "currency": "USD",
    "value": 7703
  },
  "facilitatorFee": {
    "total": 0
  }
}

Push to card & pull from card

Use the test cards in the table below to simulate the following:

Card brand Completed transfer Failed transfer
Visa 4111 1000 1000 2000 4111 1000 5000 7000
Mastercard 5200 8282 8282 8210 5200 8211 1111 1114

The expiration date can be any future date. CVV can be any 3 numbers for Visa and Mastercard.

ACH returns

You can simulate a few ACH return scenarios during different transfer stages. To see any of the return scenarios in action, create a new test transfer in the Moov Dashboard. To simulate a specific return type, input one of the return amount listed below in the Create test transfer > Amount modal. For example, if you want to simulate insufficient funds, enter $55.01 in the Dashboard.

Transfer amount Return type Return transfer stage
$55.01 R01 / Insufficient funds Debit has originated, but not completed
$55.02 R02 / Account closed Debit has originated, but not completed
$55.03 R03 / No account/Unable to locate account Credit has completed
$55.08 R08 / Payment stopped Debit has completed

Create test return transfer

If you would prefer to use the API to simulate a return, you can trigger the ACH returns in test mode by entering any of the return amount codes as the value when creating a transfer. For example, if you wanted to simulate insufficient funds, enter 5501 as the value.

1
2
3
4
5
6
7
8
9
{
  "amount": {
    "currency": "USD",
    "value": 5501
  },
  "facilitatorFee": {
    "total": 0
  }
}

A return will be only triggered if the transfer type (for example, wallet-to-bank) is applicable to the particular return scenario and amount entered. For example, an R01 in test mode always occurs on the debit leg, after the transfer stage of debit origination. Accordingly, an R01 return cannot be triggered on a wallet-to-bank transfer, as that transfer type only consists of a credit leg. Creating a return scenario that does not apply to a corresponding transfer type will result in a regular test transfer, not a test return.

Once you have created a transfer with an appropriate return code, Moov will update the transfer to failed or reversed based on the transfer stage (see ACH returns and exceptions for more information). The bank account status will also be updated accordingly.

The ACH returns and exceptions guide also includes the full ACH return code list.

Declined card transfers

To simulate a declined card-payment transfer, use the following card numbers when creating a transfer. The expiration date field for all test cards can be set to any future date.

Card brand Test card number CVV
Visa 4000020000000000 Any 3 numbers
Mastercard 5555000022220022 Any 3 numbers
Discover 6011000022220002 Any 3 numbers
American Express 3711000022220002 Any 4 numbers

Disputes

To simulate disputes, use the card numbers below when creating a transfer. The expiration date can be any future date. CVV can be any 4 numbers for Amex and any 3 numbers for all other card brands.

Card brand Test card number Phase Reason code
Visa 4000 2000 2000 2000 Chargeback 10.4
Mastercard 5555 4444 0000 4444 Chargeback 4860
Discover 6011 2222 2222 0000 Chargeback C05
American Express 3710 1000 2000 123 Chargeback F29
American Express 3720 2000 2000 188 Inquiry 21

To simulate winning or losing a dispute, you can upload winning or losing text evidence to the disputes text POST endpoint (if you submit file evidence, the dispute status will remain under-review).

The following outcomes can be simulated by entering “winning” or “losing” text evidence:

Text evidence Phase Outcome
winning-evidence chargeback Dispute will enter an under-review status for 10 minutes before updating to status: won. The chargeback is reversed and funds are credited to the merchant.
winning-evidence inquiry Dispute will enter an under-review status for 10 minutes before updating tostatus: closed.
losing-evidence chargeback Dispute will enter an under-review status for 10 minutes before updating to status: lost.
losing-evidence inquiry Dispute will enter an under-review status for 10 minutes before updating to status: response-needed.

Bank accounts

If you’ve created an account with the Moov Dashboard, we’ve already added test bank accounts on your behalf. If you’d like to add an additional test bank account, or you did not create an account through the Dashboard, you must include a valid routing number. For example:

1
322271627

The account number can be any number, for example:

1
12345654321

Micro-deposit verification

To simulate an instant micro-deposit verification in test mode, enter 0001 as the instant verification code.

To simulate traditional micro-deposit verification in test mode, enter 0 for both amounts: [0,0], and the bank account verification will succeed. If you input any other amount, the bank account verification will not complete.

Plaid

To test linking bank accounts with Plaid, simply pass env: "sandbox" into the payload in the Moov.js initialization. You can pass in any token as the processor token and Moov will link default account data that looks like the following:

1
2
3
4
  RoutingNumber: "011401533",
  AccountNumber: "1111222233330000",
  AccountType:   "checking",
  Mask:          "0000"
Summary Beta