Skip to main content

Onramp Methods

HIFI supports two onramp methods:
Virtual Accounts for USD: For recurring USD deposits, use reusable Virtual Accounts which provide permanent bank account numbers. The Onramp API generates one-time virtual accounts per transaction and currently supports USD and Africa currencies (Africa Rail beta).
When you create an onramp, HIFI generates a one-time account (unique deposit details) for that transaction. For Africa (Africa Rail beta) you must register an onramp account first and pass source.accountId; for USD you typically omit it and use the one-time deposit instructions in the response. See Onramp Accounts for details.

Using the Onramp API

The Onramp API generates a one-time virtual account for a specific transaction. This method currently supports USD and Africa currencies (Africa Rail beta). The flow is similar to regular virtual accounts, but the bank account details are valid only for this single transaction.

Request Quote

Create an onramp to get a conversion quote using the Create Onramp endpoint. Request:
The response contains the onramp quote and deposit information:
string
Unique onramp ID. Save this for tracking the transaction status.
string
Current status. AWAITING_FUNDS means the quote is ready and waiting for your deposit.
object
Conversion details including rates and amounts.
object
Most Important: Bank account details for sending your fiat deposit.

Send Payment

After receiving the quote, send the exact amount specified in depositInfo to the provided bank account. Critical requirements:
  • Use the reference ID - Include the referenceId in your bank transfer memo/reference field
  • Send exact amount - The amount must match depositInfo.amount exactly
  • Send before expiration - Deposit must arrive before quoteInformation.expiresAt
Reference ID Required: Always include the reference ID with your deposit. Deposits without the correct reference ID cannot be matched to your onramp and may be lost or delayed.

Processing

Once HIFI detects your deposit:
  1. Fiat validation - Confirms amount and reference ID match
  2. Conversion - Exchanges fiat for stablecoins at the quoted rate
  3. Delivery - Sends stablecoins to the destination wallet
  4. Completion - Transaction hash becomes available in receipt.transactionHash
Processing times vary by payment method:
  • ACH: 1-3 business days
  • Wire: Same day
  • RTP: Instant
  • International transfers: 1-5 business days depending on country

Transaction Status

Onramps progress through several phases:

System Statuses

Fiat Processing Phase

Crypto Processing Phase

Failed Deposits and Returns

An onramp can fail on either leg, and what happens to the funds depends on which leg failed:
  • FIAT_FAILED: Deposit was rejected during review, before any crypto was delivered.
  • CRYPTO_FAILED: Fiat was accepted but the crypto delivery leg failed. Fiat stays held rather than being returned automatically, and can be returned to the sender’s bank account, moving the onramp to FIAT_RETURNED. Unlike an offramp return, FIAT_RETURNED is terminal.
Returns are available on USD onramps, regardless of which rail funded the deposit. To test them in sandbox, see Onramp magic values.

Tracking Onramps

Status Updates: Subscribe to ONRAMP webhook events to receive real-time status notifications. See Webhooks for setup instructions.
Monitor onramp status using the Retrieve Onramp endpoint. The response structure matches the create endpoint shown above. Request:
Use the transactionHash in the response to view the stablecoin delivery on a blockchain explorer.

Quote Validity

Quote expiration times vary by currency. This ensures:
  • Current market rates
  • Prevention of stale pricing
  • Timely transaction processing
If your quote expires (status becomes QUOTE_FAILED):
  1. Create a new onramp request
  2. Get updated pricing
  3. Complete the deposit with the new reference ID
Quote Expiration: The expiresAt timestamp in quoteInformation shows exactly when the quote expires for your specific currency. Always check this timestamp and plan to send your deposit with enough time for bank processing before this deadline.

Key Concepts

Both methods use virtual accounts, but with different characteristics:Virtual Accounts (reusable):
  • Permanent bank account number
  • Can be used for multiple deposits
  • USD currency only
  • Created via Virtual Accounts API
Onramp API (one-time):
  • One-time virtual account per transaction
  • Generated per transaction via Onramps API
  • Currently supports USD and Africa currencies (Africa Rail beta)
  • Bank details valid only for that transaction
The Onramp API works like one-time virtual accounts. The reference ID functions similarly to how deposits are matched to virtual accounts: - Each onramp generates a unique reference ID - Include it in your bank transfer memo/reference field - HIFI uses it to match your deposit to the correct transaction - Missing reference IDs cause delays or lost funds Where to include it: Most banks have a “memo,” “reference,” or “description” field for transfers. Put the reference ID there.
The deposit amount must match exactly: - Send the exact amount shown in depositInfo.amount - Include all decimal places (e.g., 100.00,not100.00, not 100) - Don’t round or adjust for fees - Mismatched amounts may be rejected or require manual intervention
USDT onramps incur an additional 0.1% exchange fee beyond standard rates. This fee appears on your monthly invoice, not deducted from the transaction amount.
By default, stablecoins go to the user’s HIFI wallet. To send to an external wallet instead, include externalWalletId in the destination.

Getting Help

  • 📧 Email: support@hifi.com
  • 💬 Slack: Message us in our shared Slack channel