# Transactions in Test Mode

Fund your Atlas test wallet, initiate test payouts, and switch between test and live environments using the Atlas sandbox and test API keys.

When your account is in test mode real transactions won't work. That includes funding your Atlas account from a real bank account or initiating a payment to external bank account.
This page provides guidance on how you can perform transactions that mimic real ones in test mode.

## Funding your account in test mode

To fund your account in test mode, you need to make a POST request to the [Fund Business Test Wallet](https://docs.tryduplo.com/atlas/wallet/fundWallet) endpoint. This endpoint requires three parameters.

1. The virtual account details on your Atlas dashboard.
2. Your Business ID located at the "Developer" section of the Atlas settings page.
3. The amount.

For example:

```javascript
import axios from "axios";

try {
  const response = await axios.post(
    "https://atlas.tryduplo.com/api/v1/wallet/fund-wallet",
    {
      business_id: "YOUR_BUSINESS_ID",
      account_number: "1234567890",
      amount: 1000,
    },
    {
      headers: {
        Authorization: "Bearer YOUR_ACCESS_TOKEN",
      },
    },
  );

console.log(response.data);
} catch (error) {
  console.error(error.response?.data || "Request failed");
}
```

On a successful request you will get the response below and an `IN_FLOW_SUCCESS_EVENT` webhook sent to your configured URL.

**Fund Account Response**

```json
{
  "requestId": "abcd1234-5678-90ef-ghij-1234567890kl",
  "requestTimestamp": "2025-07-16 09:15:00",
  "message": "Wallet funded successfully",
  "statusCode": 200
}
```

**Note**  
The test funds take approximately 120 secs to reflect on your account.

## Using checkout in test mode

To simulate an account number payment through checkout, enter the account number and amount in the form below. You can also open the [Checkout Simulator](https://docs.tryduplo.com/atlas/simulator) as a standalone page.

### Simulate a checkout payment

- Account number
- Amount
- Send request

### Payment links

Payment links resolve to the same hosted checkout page, so the account number and card testing steps above apply when testing a payment link in test mode. Open the link in your browser while in test mode and complete the payment using the test account number provided above. To learn how to create and share payment links, see the [Payment Links guide](https://docs.tryduplo.com/atlas/guides/pay-links).

## Making a payout in test mode

You can initiate payouts in test mode the same you would on live mode; a POST request to the [Create Payout](https://docs.tryduplo.com/atlas/payouts/createPayoutBankTransfer) endpoint with the recipient's bank details and the amount you want to transfer.

For example:

```javascript
const axios = require("axios");

const initiatePayout = async () => {
  try {
    const response = await axios.post(
      "https://atlas.tryduplo.com/api/v1/payout",
      {
        amount: 50000,
        bank_code: "099858",
        account_number: "0123456789",
        account_name: "John Doe",
        narration: "Payment for services rendered",
        reference: "payout_12345",
      },
      {
        headers: {
          Authorization: "Bearer your_api_key",
          "Content-Type": "application/json",
          Accept: "application/json",
        },
      },
    );

console.log(response.data);
  } catch (error) {
    console.error(error.response.data);
  }
};

initiatePayout();
```

**Info**  
Learn more about payouts and how they work in the [Payout Guide](https://docs.tryduplo.com/atlas/guides/single-payout)

## Test card details

You can test the checkout by card using these card details. The gateway response is controlled by the **expiry date** and **CVV** you provide, not the card number itself.

**Tip**  
You can use any four-digit number as the card PIN when prompted during checkout.

### VISA

| Card Number         | Card Holder | Expires | CVV  |
|---------------------|-------------|---------|------|
| •••• •••• •••• 1019 | TEST USER   | 01/39   | 100  |
| •••• •••• •••• 0008 | TEST USER   | 01/39   | 100  |
| •••• •••• •••• 1019 | TEST USER   | 05/39   | 100  |
| •••• •••• •••• 0008 | TEST USER   | 05/39   | 100  |
| •••• •••• •••• 1019 | TEST USER   | 04/27   | 100  |
| •••• •••• •••• 1019 | TEST USER   | 08/28   | 100  |

**Additional Visa numbers:** `4012000033330026`

**Additional Mastercard numbers:** `2223000000000007`, `5111111111111118`, `2223000000000023`

### Simulating responses by expiry date

Use the expiry dates below to trigger specific gateway responses regardless of the card number you use.

| Expiry | Gateway response          |
|--------|---------------------------|
| `01/39` | APPROVED                  |
| `05/39` | DECLINED                 |
| `04/27` | EXPIRED_CARD            |
| `08/28` | TIMED_OUT                |
| `01/37` | ACQUIRER_SYSTEM_ERROR  |
| `02/37` | UNSPECIFIED_FAILURE     |
| `05/37` | UNKNOWN                   |

### Simulating responses by CVV

Use the CVV values below to simulate specific card verification responses.

| CVV  | Response        |
|------|----------------|
| `100` | MATCH          |
| `101` | NOT_PROCESSED  |
| `102` | NO_MATCH       |

## Switching to live mode

Once you've finished testing your integration, switch to live mode by toggling the environment selector in your Atlas dashboard. Replace your test API keys with live keys, and your application will process real transactions.
