Skip to main content
A customer can hold funds in two places: a virtual account and a trading account.
  • A virtual account (va_), which has its own set of bank details in your (or your customer’s) legal entity’s name. Once a virtual account is designated as active and its group is enabledIt can receive funds from and make payments to third parties.
    See the onboarding flow.
  • A trading account, opened at signup and used to settle your FX trades. It can only receive funds from, and allow withdrawals to, the customer’s own accounts at other institutions. It cannot receive funds from or send funds to third parties.
Funds may flow between the two account types via a transfer (trf_).

Movement Actions

↳ Prerequisite: the virtual account is active and its group is enabled with onboarding approved. See the onboarding flow. A virtual account issued pending cannot receive or pay.
Youthe API callerHopautomaticBankpayer or payee
  1. Money in
  2. 1You
    Get the payer the details for where the money should land
    1. 1a
      Trading account: read the deposit instructions, or create a wallet for cryptoGET/accounts/{aid}/deposit-instructions POST/accounts/{aid}/wallets
    2. 1b
      Virtual account: read its bank detailsGET/accounts/{aid}/virtual-account-groups/{gid}/virtual-accounts/{va_id}
  3. 2Bank
    Payer sends funds to those details over a supported rail, or on-chainACH · Fedwire · SWIFT · SEPA · SPEI · PIX · FPS
  4. 3Hop
  5. Hold & convert
  6. 4You
  7. 5You
  8. 6You
  9. Money out
  10. 7You
  11. 8You
    Create the payout, naming the funding sourcePOST/accounts/{aid}/payouts po_
    1. 8a
      Withdrawal from the trading account: funding_source.type is trading_account, the beneficiary must be self_owned. Omit method.
    2. 8b
      Payout from a virtual account: funding_source.type is virtual_account, any active beneficiary. Include a top-level method for the selected payment rail.
  12. 9Hop
  13. 10Hop
    Submits to the provider once any approval has clearedstatus: processing
  14. 11Bank
    Payee’s bank credits the fundssettlement
  15. 12You
    Reconcile on the webhook, or poll the payoutpayout.completed · payout.failed GET/payouts/{id}
Money in: a payin (pi_) credited to a virtual account or the trading account, depending on which instruction the payer used. Money out: a payout (po_) funded from either. Between them: a transfer (trf_) to move value, and an FX trade (fxt_) to change its currency.

Outflows

funding_source decides which balance is debited and which beneficiaries the payout may go to. FX settles in the trading account, so converting money that arrived in a virtual account means transferring it across first, executing the trade, and transferring the proceeds back if you want to pay from a virtual account in the new currency.

Transaction limits

Most payment rails have high daily limits and no customer-level cap. For local USD payments, including ACH, Fedwire, RTP, and FedNow, our banking partners apply an aggregate daily limit of approximately $50 million. SEPA Instant (SEPA_INST) has a limit of €1 million per transaction. There is no minimum transaction amount, but zero-value transactions are not allowed. Contact your account manager for the limits that apply to a specific payment rail or to request a higher limit.

Service fees

Hop may charge a fee when a virtual account is created or used to make a payout. Fees are debited from a trading account:
  • For customers onboarded directly by Hop, the fee is debited from the customer’s own trading account.
  • For end customers onboarded through a platform, the fee is debited from the platform’s fee-collection account. The end customer is not charged, and an insufficient balance in the fee-collection account does not block the payout.