Enabled on request. Foreign currency accounts have to be enabled for your account first. Ask Pagoramp to request it.
1. Check availability
Ask what CAD needs for your account. The answer lists the required fields per customer type and account type.2. Create the customer
Required for an individual:firstname, lastname, email, phone, dateOfBirth, nationality, occupation, address.line1, address.city, address.state, address.postalCode, address.country, documents (type id_document), documents (type utility_bill). See Virtual account requirements for every combination.
kycStatus incomplete or pending. Anything missing for CAD can be added later with PATCH /customers/{uuid} before you request the account.
3. Request the account
400 with webhook_secret_required.
The response depends on the currency. For CAD, expect pending then active:
pending: The account is still being issued or approved. Wait for virtual_account.created.
active: Ready. Show the bank details to your payer.
422 with the reason in errors[0].reason and no account is created. If it is rejected later you receive virtual_account.failed with a reason. See Webhooks.
4. Show the details to your payer
Show these fields frombankDetails:
How your payer sends the money:
- Open their Canadian banking app and choose Interac e-Transfer.
- Send to the email shown.
5. Receive the payment
When the payment arrives you receivevirtual_account.payment.received. Amounts are decimal strings in CAD; destinationAmount is in USD, after any fees.
data.transaction.reference to ignore repeats. See Webhooks.
Things to handle
- CAD needs the most detail: date of birth, address, an ID document and a utility bill for individuals, and registration details, owners and incorporation documents for businesses. Documents are https links.
- You confirm that the customer accepted the account terms:
termsAcceptanceon the API, a checkbox in the dashboard. - Approval takes time. You receive
virtual_account.createdwhen it is approved orvirtual_account.failedwith the reason. - A payment can be held for review. You receive
virtual_account.payment.manual_reviewwith areview.reason, thenreceivedorrejectedafter a decision. GET /virtual-accounts/{uuid}returns the current status at any time, andPOST /virtual-accounts/{uuid}/deactivatestops the account accepting payments.

