> ## 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.

# Virtual Accounts Overview

> Give each customer a bank account in their own currency and get paid by bank transfer.

# Virtual accounts

A virtual account is a bank account issued for one of your customers. They pay into it from their own bank, and you are notified and settled in USD. Accounts are **dedicated** (permanent) or **dynamic** (one exact amount, then it expires).

## The flow

```mermaid theme={null}
sequenceDiagram
  participant You
  participant Pagoramp
  participant Customer
  You->>Pagoramp: GET /virtual-accounts/availability?currency=XXX
  You->>Pagoramp: POST /customers
  You->>Pagoramp: POST /virtual-accounts
  Pagoramp-->>You: status (active, pending or requires_action)
  opt requires_action
    You->>Customer: send nextStep.url to verify
    Pagoramp-->>You: virtual_account.created (or .failed with a reason)
  end
  You->>Customer: show the bank details
  Customer->>Pagoramp: pays by bank transfer
  Pagoramp-->>You: virtual_account.payment.received
```

## Statuses

| Status | Meaning | What to do |
| - | - | - |
| `active` | Bank details are ready | Show them to the customer |
| `requires_action` | The customer must verify first | Send them `nextStep.url` |
| `pending` | The account is being issued or approved | Wait for `virtual_account.created` or `virtual_account.failed` |
| `failed` | The account was declined | Read `statusReason`, fix the cause and request again |
| `expired` | A dynamic account passed its expiry | Request a new one |
| `deactivated` | Closed by you or by Pagoramp | None |

`statusReason` is `{ "code", "message" }`. Codes: `declined` (the account was declined), `verification_failed` (identity or business verification was not approved). All events are in [Webhooks](https://dev-docs.pagoramp.com/virtual-account-webhooks.md).

## Payments

Each payment becomes a transaction. It is credited straight away, or held for review when it needs a decision: an underpayment or overpayment on a dynamic account, a second payment to a paid dynamic account, a payment above the review limit, a payment from a sender whose name does not match the customer where that is switched on, or a payment the bank is holding. See [Webhooks](https://dev-docs.pagoramp.com/webhooks).

## Currencies

| Currency | Country | Rail | Account types | Availability |
| - | - | - | - | - |
| [NGN](https://dev-docs.pagoramp.com/ngn-virtual-account.md) | Nigeria | Nigerian bank account (NUBAN) | dedicated, dynamic | Standard |
| [USD](https://dev-docs.pagoramp.com/usd-virtual-account.md) | United States | ACH, FedNow and wire | dedicated | Standard |
| [EUR](https://dev-docs.pagoramp.com/eur-virtual-account.md) | Eurozone | SEPA | dedicated | Standard |
| [GBP](https://dev-docs.pagoramp.com/gbp-virtual-account.md) | United Kingdom | Faster Payments | dedicated | Standard |
| [MXN](https://dev-docs.pagoramp.com/mxn-virtual-account.md) | Mexico | SPEI (CLABE) | dedicated | On request |
| [BRL](https://dev-docs.pagoramp.com/brl-virtual-account.md) | Brazil | Pix (BR code) | dedicated | On request |
| [COP](https://dev-docs.pagoramp.com/cop-virtual-account.md) | Colombia | Bre-B (key) | dedicated | On request |
| [KES](https://dev-docs.pagoramp.com/kes-virtual-account.md) | Kenya | Bank transfer | dedicated, dynamic | Standard |
| [GHS](https://dev-docs.pagoramp.com/ghs-virtual-account.md) | Ghana | Bank transfer | dedicated | Standard |
| [CAD](https://dev-docs.pagoramp.com/cad-virtual-account.md) | Canada | Interac e-Transfer | dedicated | On request |
| [TZS](https://dev-docs.pagoramp.com/tzs-virtual-account.md) | Tanzania | Bank transfer (TIPS, TISS, mobile money) | dedicated | Standard |

What each currency needs: [Virtual account requirements](https://dev-docs.pagoramp.com/virtual-accounts-requirements). Customer fields: [Customers](https://dev-docs.pagoramp.com/customers-overview.md). Identification by country: [Identification requirements](https://dev-docs.pagoramp.com/identification-requirements-by-country.md).

## Before you start

* Set a webhook URL and secret in your dashboard. Creating an account without a secret returns `400` with `webhook_secret_required`.
* Customers belong to your account, and are created and changed through the API.
* You can also request an account from a customer's page in the dashboard.


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