- 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 asactiveand its group isenabledIt 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.
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
- Money in
- 1YouGet the payer the details for where the money should land
- 1aTrading account: read the deposit instructions, or create a wallet for cryptoGET/accounts/{aid}/deposit-instructions POST/accounts/{aid}/wallets
- 1bVirtual account: read its bank detailsGET/accounts/{aid}/virtual-account-groups/{gid}/virtual-accounts/{va_id}
- 1a
- 2BankPayer sends funds to those details over a supported rail, or on-chainACH · Fedwire · SWIFT · SEPA · SPEI · PIX · FPS
- 3Hop
- Hold & convert
- 4YouCheck the balances: the trading account and each virtual account are reported separatelyGET/customers/{cid}/accounts/{aid}/balances
- 5YouMove value between the trading account and a virtual account, or between two virtual accounts: same currency, settles at oncePOST/accounts/{aid}/transfers trf_
- 6YouConvert currency in the trading account: quote, then execute before it expiresPOST/accounts/{aid}/fx/quotes · /execute fxt_
- Money out
- 7YouRecord who you are paying and where: a beneficiary, then a payout destination under itPOST/beneficiaries · /payout-destinations bene_ · dest_
- 8YouCreate the payout, naming the funding sourcePOST/accounts/{aid}/payouts po_
- 8aWithdrawal from the trading account:
funding_source.typeistrading_account, the beneficiary must beself_owned. Omitmethod. - 8bPayout from a virtual account:
funding_source.typeisvirtual_account, any active beneficiary. Include a top-levelmethodfor the selected payment rail.
- 8a
- 9Hop
- 10HopSubmits to the provider once any approval has clearedstatus: processing
- 11BankPayee’s bank credits the fundssettlement
- 12YouReconcile 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.