Skip to main content

How Offramps Work

Offramps follow a quote-based flow:
1

Create offramp request

Specify the source wallet, destination account, and amount to convert.
2

Review quote

Examine the exchange rate, fees, and quote expiration time.
3

Accept quote

Accept the quote to execute the conversion. Stablecoins are converted to fiat and sent to the registered bank account.

Creating Offramps

Use the Create Offramp endpoint to get a quote. Request:
The response contains the offramp quote information:
string
Unique offramp ID. Use this to track the transaction and accept the quote.
string
Offramp status. OPEN_QUOTE means the quote is ready for review. See Transaction Status for details.
object
Conversion quote details including exchange rate, amounts, and expiration time.
object
Developer fee details if included in the request.
object
Source wallet details including user information and stablecoin amount.
object
Destination bank account details including account ID and user information.
object
Transaction receipt. Contains transactionHash once the stablecoin conversion is confirmed on-chain, and paymentTracking once fiat processing begins.
For detailed field documentation, see the Create Offramp API reference.

Accepting Quotes

After reviewing the quote, accept it to execute the conversion using the Accept Quote endpoint. Request:
When the quote is accepted, the response shows the updated status:
string
Updated offramp status. CRYPTO_INITIATED means the conversion has started. See Transaction Status for progression.
Once accepted, the offramp progresses through crypto and fiat processing phases until completion.

Transaction Status

Offramps progress through several phases:

System Statuses

Crypto Processing Phase

Fiat Processing Phase

Failed Payouts and Returns

An offramp can fail on either leg, and what happens to the funds depends on which leg failed:
  • CRYPTO_FAILED: Transfer was rejected before the fiat leg started. When the offramp is funded from a HIFI wallet, nothing left the wallet. When it is funded from an external wallet, crypto is returned to the sender and offramp continues on to CRYPTO_RETURNED.
  • FIAT_FAILED: Fiat payout failed after the crypto had already left the source wallet. Crypto is returned to the sender, and the offramp progresses to CRYPTO_RETURNED once that on-chain delivery confirms. Depending on the rail, it may report an intermediate FIAT_RETURNED first.
Returns are available on USD offramps and global network offramps. To test them in sandbox, see Offramp magic values.

Tracking Offramps

Status Updates: Subscribe to OFFRAMP webhook events to receive real-time status notifications. See Webhooks for setup instructions.
Monitor offramp status using the Retrieve Offramp endpoint. The response structure matches the create endpoint shown above. Request:

Quote Validity

Quotes expire 10 minutes after creation to ensure current market rates. This prevents:
  • Stale pricing during volatile markets
  • Long-pending transactions
  • Rate arbitrage
If your quote expires (status becomes QUOTE_FAILED):
  1. Create a new offramp request
  2. Review the updated quote
  3. Accept the new quote within 10 minutes
Time Sensitive: Always check quoteInformation.expiresAt before accepting. Attempting to accept an expired quote will fail.

Purpose of Payment Code

Payment Purpose Codes (PPCs), also known as payment reason codes, are standardized identifiers that provide the reason for a crossborder or international payment. PPCs enable payers to categorize the payment, whether for goods, services, investments, or other purposes. In crossborder payments, PPCs add an additional layer of transparency by ensuring funds are used for legitimate purposes and are considered mandatory or required fields by the Central Banking authority in certain jurisdictions, i.e. India, Malaysia, and the United Arab Emirates.

United Arab Emirates (ARE)

Key Concepts

The quote provides complete pricing transparency:
  • sendGross: Total stablecoins being converted
  • sendNet: Net amount after fees
  • receiveGross: Total fiat before fees
  • receiveNet: Actual fiat you’ll receive
  • rate: Exchange rate (stablecoin to fiat)
  • expiresAt: Quote expiration timestamp
Always verify receiveNet matches your expectations before accepting.
Monetize offramp transactions by adding a developer fee when creating the offramp:FIX: Fixed amount regardless of transaction size
PERCENT: Percentage of transaction amount
Developer fees are paid in stablecoins from the source wallet before conversion.
USDT offramps incur an additional 0.1% exchange fee beyond standard rates. This fee appears on your monthly invoice, not deducted from the transaction amount.
Before creating offramps, ensure:
  • User has completed KYC for the destination currency’s rail
  • Offramp account is created and active (status: ACTIVE)
  • Sufficient stablecoin balance in the source wallet

Getting Help

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