Canadian Virtual Accounts
CAD Virtual Account Funding
For CAD virtual accounts, the customer makes one setup call and then just listens for the webhook.
Step-by-step process
| Step | Who | Call or action | Notes |
|---|---|---|---|
| 1 | VoPay | Virtual Account is created and assigned to a Merchant account | There is no API for this step. VoPay will create a virtual account for a customer |
| 2 | VoPay/Customer | Virtual account Information is shared with the customer | VoPay CSM and/or Implementation team shares the account and transit numbers with the customer. Through email |
| 3 | Customer | Register the webhook | POST /api/v2/account/webhook-url with Type=virtualtransaction. Test it with /api/v2/account/webhook-url/test?Type=virtualtransaction |
| 4 | Payer | Payer (Customer itself or a 3rd party) sends CAD payment to the virtual account | EFT or wire to the virtual account |
| 5 | VoPay | Funds land in Virtual Account | VoPay confirms the transaction |
| 6 | VoPay | VoPay applies funding to a VoPay account and sends webhook notification | VoPay updates account transaction history and sends thevirtualtransactionwebhook notification. |
| 7 | Customer | Receive the notification | virtualtransaction webhook. Match on ClientAccountID, and confirm the amount |
| 8 | Customer | Look up the details | GET /api/v2/account/transactions (filter by client account), GET /api/v2/account/client-accounts/balance. Use these for reconciliation or to see the running balance |
| 9 | Customer | Use the funds | Any payout from the client account, or a transfer between client accounts. This is optional. The funds are already in the client account |
virtualtransaction Webhook notification
virtualtransaction Webhook notificationWhen a credit is approved, the customer receives a virtualtransaction webhook, and a ledger transaction appears on the client account.
Webhook fields
| Field | Meaning |
|---|---|
| ID | The ledger transaction ID. Pass it to the transaction lookup endpoints |
| ClientAccountID | The client account that received the funds (the one the virtual account is mapped to) |
| TransactionType | funding or wire for a credit, withdraw for a debit. VoPay ops picks it when they approve |
| Amount | CAD amount as BMO reported it |
| TransactionDate | Transaction date from BMO |
| AvailableBalance | Available CAD balance of the whole account (FetchAvailableBalance), not the client account's balance |
Sample payload
{
"Success": true,
"EventID": 12345,
"Event": "virtualtransaction",
"Status": "successful",
"FailureReason": "",
"ID": 98765,
"UpdatedAt": "2026-09-28 14:30:00",
"ValidationKey": "...",
"Environment": "Production",
"TransactionDate": "2026-09-28",
"Amount": "2500.00",
"AccountID": "<API account ID>",
"ClientAccountID": "<client account ID>",
"TransactionType": "funding",
"AvailableBalance": "..."
}Virtual Account Info and Transaction History in VoPay portals
| VoPay Accounts Portal Screen | Details |
|---|---|
| VoPay Dashboard & Account Summary screen | Account Balances goes up |
| Transaction history | Virtual Account Funding or Virtual Account Wire transaction shows up under Account Transaction History. You can filter by those types. |
| Contact/Client Transaction History | The credit appears in that client account's transactions and balance. You can filter by virtual account transaction types. |
Updated about 5 hours ago
Did this page help you?