Skip to main content
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
  1. 1You
    Get the details the payer needs
    1. 1a
    2. 1b
      To a virtual account: read its bank detailsGET/accounts/{aid}/virtual-account-groups/{gid}/virtual-accounts/{va_id}
    3. 1c
  2. 2You
  3. 3Payer
    Sends funds over a supported rail or on-chainACH · Fedwire · SWIFT · SEPA · SPEI · PIX · FPS
  4. 4Hop
  5. 5You
  6. 6You
    Reconcile 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.

Troubleshooting