> ## Documentation Index
> Fetch the complete documentation index at: https://dev-docs.pagoramp.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Test Virtual Account in the sandbox

> Request virtual accounts and simulate payments before you go live.

The sandbox lets you build the whole virtual account flow without moving real money. Request accounts as you would in production, then simulate a customer paying one.

## Simulate a payment

```bash theme={null}
curl -X POST https://pay-api-staging.pagoramp.com/api/v1/virtual-accounts/{uuid}/simulate-deposit \
  -H "x-api-key: YOUR_SANDBOX_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "amount": 5000 }'
```

The payment runs through the same fees, review rules, settlement and webhooks as a real one, so you see exactly what your integration will receive.

| Field | Required | Notes |
| - | - | - |
| `amount` | Dedicated accounts | In the account currency. Dynamic accounts default to their expected amount |
| `senderName` | No | Defaults to the customer's name. Send a different name to see how a payment from someone else is handled |

The response tells you what happened:

```json theme={null}
{
  "status": "success",
  "message": "Deposit simulated successfully",
  "data": { "processed": true, "transactionReference": "va-17912345678901234", "status": "success" }
}
```

`status` is `success` or `manual_review`. Held payments include a `reason`.

## What to try

| To see | Do this |
| - | - |
| A normal payment | Simulate the customer's expected amount. You get `virtual_account.payment.received` |
| An underpayment or overpayment | On a dynamic account, send less or more than the expected amount. You get `virtual_account.payment.manual_review` with `amount_variance` |
| A payment from someone else | Send a different `senderName`, where your account has sender checks on. You get `virtual_account.payment.manual_review` with `third_party_deposit` |
| A payment to a closed account | Deactivate the account, or let a dynamic account expire, then simulate. The payment is held as `account_inactive` |

## Limits

* Simulation works in the sandbox only. In production the request returns `403` with `simulation_unavailable`.
* The account must be `active`. Accounts that are `pending`, `requires_action` or `failed` return `400` with `account_not_active`.
* Simulated payments are marked as simulated in the payment record, and never move real money.
* Requesting accounts in the sandbox can still carry an issuance fee. See [Issuance fees](https://dev-docs.pagoramp.com/virtual-accounts/issuance-fees).


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.