Fiat arrives through deposit instructions, crypto through a wallet. Either way the result is a payin (
pi_) that names the balance it credited.↳ Memo decides what the payer must do. A dedicated account number (
memo null) needs nothing extra. A shared account (memo set) needs the memo on the payment, or the deposit cannot be credited automatically. Named virtual accounts need flow 2 first.Youthe API callerHopautomaticPayerthird party
- 1YouGet the details the payer needs
- 1aTo the trading account by bank transfer: read the deposit instructionsGET/accounts/{aid}/deposit-instructions
- 1bTo a virtual account: read its bank detailsGET/accounts/{aid}/virtual-account-groups/{gid}/virtual-accounts/{va_id}
- 1cIn crypto, to the trading account: create a wallet for the currency and networkPOST/accounts/{aid}/wallets wal_
- 1a
- 2You
- 3PayerSends funds over a supported rail or on-chainACH · Fedwire · SWIFT · SEPA · SPEI · PIX · FPS
- 4HopCredits the virtual account or trading account and raises a payinpayin.receivedpi_
- 5You
- 6YouReconcile per virtual account and date windowGET/accounts/{aid}/payins?virtual_account_id=va_…
Known gaps: a
pending payin has no documented duration and no settlement event beyond the single payin.received. Returned deposits have no event (payin.returned is reserved); detect them by re-reading status. A deposit in a currency the account has no instruction for has no documented outcome.