GuidesUse cases

Cross-border remittances

Build a remittance product that collects in one currency and pays out in another

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, the recipient's bank account or mobile money account, and the 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

Collect inPay out toCollection methodPayout method
CADNGNInteracBank transfer
USDNGNVirtual Bank Account (ACH)Bank transfer
GBPNGNVirtual Bank Account (BACS)Bank transfer
EURNGNVirtual Bank Account (SEPA)Bank transfer
CADGBPInteracBank transfer (BACS)
USDEURVirtual Bank Account (ACH)Bank transfer (SEPA)
Any wallet currency with an active currency pairKES, UGX, TZS, or GHSThe method for the collection currencyMobile money
Any wallet currency with an active currency pairXOF (Benin or Côte d'Ivoire)The method for the collection currencyMobile money

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

A mobile money payout needs method set to mobile_money, and the fields phone_number, mobile_money_operator_id, and account_name. XOF is offered in more than one country, so send the XOF currency ID of the destination country. See Creating your first payout for the steps.

APIs used

On this page