Skip to main content
Offramps convert stablecoins into fiat currency and send it to external bank accounts. Users must accept a quote before the conversion executes.

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:
curl -X POST "https://sandbox.hifibridge.com/v2/offramps" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "requestId": "201ca31d-700f-4c76-ac4b-961623acbb79",
    "source": {
      "currency": "usdc",
      "chain": "POLYGON",
      "userId": "7d54a7a7-dac3-4313-8b09-27fa4b7fd1ee",
      "amount": 10
    },
    "destination": {
      "currency": "usd",
      "accountId": "12c1c496-8f57-41a1-8292-dbe6547791ce",
      "userId": "7d54a7a7-dac3-4313-8b09-27fa4b7fd1ee",
      "sameDayAch": false
    },
    "developerFee": {
      "fees": [
        {
          "type": "PERCENTAGE",
          "value": "0.0005",
          "walletAddress": "0x366B759bAA089Fa57a08edd3F2E028E86b97f8D7"
        }
      ]
    }
  }'
The response contains the offramp quote information:
{
  "transferType": "OFFRAMP",
  "transferDetails": {
    "id": "173c1e89-7bbd-4352-9e5d-73807681510d",
    "requestId": "201ca31d-700f-4c76-ac4b-961623acbb79",
    "createdAt": "2025-02-03T16:12:04.331652+00:00",
    "updatedAt": "2025-02-03T16:12:08.732+00:00",
    "status": "OPEN_QUOTE",
    "failedReason": null,
    "source": {
      "userId": "7d54a7a7-dac3-4313-8b09-27fa4b7fd1ee",
      "chain": "POLYGON",
      "currency": "usdc",
      "amount": 10,
      "walletAddress": "0x366B759bAA089Fa57a08edd3F2E028E86b97f8D6",
      "user": {
        "email": "john.doe@hifibridge.com",
        "firstName": "John",
        "lastName": "Doe",
        "businessName": null
      }
    },
    "destination": {
      "userId": "7d54a7a7-dac3-4313-8b09-27fa4b7fd1ee",
      "amount": 0,
      "currency": "usd",
      "user": {
        "email": "john.doe@hifibridge.com",
        "firstName": "John",
        "lastName": "Doe",
        "businessName": null
      },
      "accountId": "12c1c496-8f57-41a1-8292-dbe6547791ce",
      "sameDayAch": false
    },
    "receipt": {
      "transactionHash": null,
      "paymentTracking": null
    },
    "developerFee": {
      "id": "1c3d24c1-6136-574c-a647-e7eb6a9fb6ed",
      "transactionHash": null,
      "fees": [
        {
          "type": "PERCENTAGE",
          "value": "0.0005",
          "amount": "0.000515",
          "walletAddress": "0x366B759bAA089Fa57a08edd3F2E028E86b97f8D7"
        },
        {
          "type": "FLAT",
          "value": "0.01",
          "amount": "0.010000",
          "walletAddress": "0x366B759bAA089Fa57a08edd3F2E028E86b97f8D7"
        }
      ]
    },
    "quoteInformation": {
      "sendGross": {
        "amount": "10",
        "currency": "usdc"
      },
      "sendNet": {
        "amount": "10",
        "currency": "usdc"
      },
      "receiveGross": {
        "amount": "10",
        "currency": "usd"
      },
      "receiveNet": {
        "amount": "10",
        "currency": "usd"
      },
      "rate": "1",
      "expiresAt": "2025-02-03T16:22:08.668Z"
    },
    "depositInformation": []
  }
}
transferDetails.id
string
Unique offramp ID. Use this to track the transaction and accept the quote.
transferDetails.status
string
Offramp status. OPEN_QUOTE means the quote is ready for review. See Transaction Status for details.
transferDetails.quoteInformation
object
Conversion quote details including exchange rate, amounts, and expiration time.
transferDetails.developerFee
object
Developer fee details if included in the request.
transferDetails.source
object
Source wallet details including user information and stablecoin amount.
transferDetails.destination
object
Destination bank account details including account ID and user information.
transferDetails.receipt
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:
curl -X POST "https://sandbox.hifibridge.com/v2/offramps/173c1e89-7bbd-4352-9e5d-73807681510d/quote/accept" \
  -H "Authorization: Bearer YOUR_API_KEY"
When the quote is accepted, the response shows the updated status:
{
  "transferType": "OFFRAMP",
  "transferDetails": {
    "id": "off_abc123",
    "status": "CRYPTO_INITIATED",
    "quoteInformation": {
      "expiresAt": "2025-02-03T16:22:08.668Z"
    }
  }
}
transferDetails.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:

Creation & Quote Phase

StatusDescription
CREATEDOfframp request created successfully
NOT_INITIATEDRequest not submitted due to validation error
OPEN_QUOTEQuote generated and awaiting acceptance
QUOTE_FAILEDQuote expired before acceptance

Crypto Processing Phase

StatusDescription
CRYPTO_INITIATEDConverting stablecoins, blockchain transaction started
CRYPTO_PENDINGBlockchain transaction awaiting confirmation
CRYPTO_PROCESSEDStablecoins successfully converted
CRYPTO_FAILEDBlockchain transaction failed
CRYPTO_RETURNEDFailed transaction refunded to user’s wallet

Fiat Processing Phase

StatusDescription
FIAT_INITIATEDFiat payout process started
FIAT_PENDINGFiat transaction awaiting settlement
FIAT_FAILEDFiat transaction failed
COMPLETEDFiat successfully delivered to bank account

Tracking Offramps

Status Updates: Subscribe to OFFRAMP.CREATE and OFFRAMP.UPDATE 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:
curl -X GET "https://sandbox.hifibridge.com/v2/offramps/173c1e89-7bbd-4352-9e5d-73807681510d" \
  -H "Authorization: Bearer YOUR_API_KEY"

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.

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
{
  "fee": {
    "type": "FIX",
    "value": 0.5
  }
}
PERCENT: Percentage of transaction amount
{
  "fee": {
    "type": "PERCENT",
    "value": 0.01
  }
}
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