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 sender β€” Create 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 recipient β€” Create 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