Skip to main content
Build a remittance product that lets users send money internationally. Collect funds in one currency, convert them, and pay out in the destination currency — all through a single API integration.

How it works

Step-by-step

  1. Onboard the senderCreate a customer and verify them. For type=individual, use the standard KYC flow — only a Driver’s License, Passport, or Resident Permit is accepted, ID cards (National Identity Cards) are not. For type=business, follow the KYB flow — beneficial owners and KYB documents instead of the legacy /files flow. All document images must be clear and legible — unclear images will be rejected, and repeated submission of fraudulent documents will result in the customer being permanently blacklisted.\n\n
    \n For cross-border senders, business customers need kyb_scope=FULL to hold USD/GBP/EUR Virtual Bank Accounts. NGN VBAs work for both Minimal and Full.\n
  2. Create a Virtual Bank Account — Call POST /virtual-bank-account with your business wallet_id and the customer_id. For NGN, the account activates instantly. For USD, GBP, and EUR, wait for the virtual_account.ready webhook before sharing the account details. See the Virtual Bank Accounts guide for currency-specific prerequisites.
  3. Collect funds — The sender deposits money into the Virtual Bank Account. The collection method depends on the source currency:
    • CAD: Sender pays via Interac — no API call needed, you receive a collection.completed webhook when funds arrive.
    • NGN, USD, GBP, EUR: Sender transfers to your Virtual Bank Account — you receive a collection.completed webhook when funds settle.
    • Card: You initiate a card charge via POST /collection (card collections only, must be enabled for your business).
  4. Preview the cost — Call the Fee breakdown endpoint to calculate the exchange rate, fees, and the exact amount the recipient will receive.
  5. Payout to recipientCreate a payout specifying the destination currency, bank account, and amount. Use to_amount to guarantee the recipient receives an exact amount, or from_amount to send from a fixed debit.
  6. Track status — Listen for payout.completed or payout.failed webhooks to update your user in real time.

Supported corridors

Cross-currency payouts apply an exchange rate at transaction time. Always call Fee breakdown to preview the total cost before initiating.

APIs used