This guide shows you how to send money - converting stablecoins (like USDC) into fiat currency (like USD) and sending it to a user’s bank account.
⏱️ Time to complete: 5-10 minutes
Sandbox Environment: All examples in this guide use the sandbox
environment (https://sandbox.hifibridge.com). Transactions are simulated -
no real money moves. When you’re ready for production, replace the sandbox URL
with the production endpoint.
Prerequisites
Before sending money, ensure you have:
✅ User created with Terms of Service accepted
✅ KYC completed and approved for the target rail
✅ Offramp Account set up for receiving fiat
✅ API keys from the Dashboard
If you haven’t set up users, KYC, or accounts yet, see the Quickstart
Guide for step-by-step instructions.
How Sending Money Works
Sending money is a two-step process:
Create offramp request - Get a quote for the conversion
Accept the quote - Execute the offramp
Step 1: Create Offramp Request
Create an offramp request using the Create an offramp endpoint:
Request:
curl --request POST \
--url https://sandbox.hifibridge.com/v2/offramps \
--header 'accept: application/json' \
--header 'authorization: Bearer YOUR_API_KEY' \
--header 'content-type: application/json' \
--data '
{
"source": {
"currency": "usdc",
"chain": "POLYGON",
"userId": "32051b2f-0798-55a7-9c42-b08da4192c97",
"amount": 1
},
"destination": {
"currency": "usd",
"accountId": "583eb259-e78b-4f0c-a4b5-a8957876fa6f",
"userId": "32051b2f-0798-55a7-9c42-b08da4192c97"
},
"requestId": "b08e27be-c086-4b84-a321-307ed9f265e1"
}
'
Request Fields:
Unique identifier (UUID) for this offramp request.
Source of the offramp (crypto side). The user sending crypto (who wants to send money).
Source cryptocurrency (e.g., “usdc”)
Blockchain network (e.g., “POLYGON”)
Amount of stablecoins to convert to fiat.
Destination of the offramp (fiat side). The user receiving the fiat (typically the same as source.userId).
Destination fiat currency (e.g., “usd”)
The offramp bank account ID where fiat will be sent.
Response:
{
"transferType" : "OFFRAMP" ,
"transferDetails" : {
"id" : "b838908b-95d0-4ebb-a2c6-8f0c142bcdd7" ,
"requestId" : "b08e27be-c086-4b84-a321-307ed9f265e1" ,
"createdAt" : "2025-09-26T03:15:57.766Z" ,
"updatedAt" : "2025-09-26T03:15:58.463Z" ,
"status" : "OPEN_QUOTE" ,
"failedReason" : null ,
"error" : null ,
"errorDetails" : null ,
"source" : {
"userId" : "32051b2f-0798-55a7-9c42-b08da4192c97" ,
"chain" : "POLYGON" ,
"currency" : "usdc" ,
"amount" : 1 ,
"walletAddress" : "0x1b932E54e77Aeb698144550d5a493Ea99E20Daa7" ,
"user" : {
"email" : "[email protected] " ,
"lastName" : "Doe" ,
"firstName" : "John" ,
"businessName" : null
}
},
"destination" : {
"userId" : "32051b2f-0798-55a7-9c42-b08da4192c97" ,
"amount" : 1 ,
"currency" : "usd" ,
"user" : {
"email" : "[email protected] " ,
"lastName" : "Doe" ,
"firstName" : "John" ,
"businessName" : null
},
"accountId" : "583eb259-e78b-4f0c-a4b5-a8957876fa6f"
},
"receipt" : {
"transactionHash" : null
},
"developerFee" : null ,
"quoteInformation" : {
"rate" : "1.00" ,
"sendNet" : {
"amount" : "1.00" ,
"currency" : "usdc"
},
"sendGross" : {
"amount" : "1.00" ,
"currency" : "usdc"
},
"receiveNet" : {
"amount" : "1.00" ,
"currency" : "usd"
},
"receiveGross" : {
"amount" : "1.00" ,
"currency" : "usd"
},
"expiresAt" : "2025-09-27T03:15:58.112Z"
},
"depositInformation" : []
}
}
Response Fields:
Unique offramp transaction ID. Save this - you’ll need it to accept the
quote and check status.
Current status: OPEN_QUOTE means you have an active quote that needs to be
accepted.
transferDetails.quoteInformation
Critical: Contains the conversion rate and amounts. Review this before accepting.Exchange rate (stablecoin to fiat)
Fiat amount you’ll receive after fees
Quote Expiration: Quotes typically expire after 15-30 minutes. If your
quote expires before you accept it, you’ll need to create a new offramp
request to get a fresh quote with updated rates.
Step 2: Accept the Quote
After reviewing the quote, accept it to start the offramp process using the Accept Quote endpoint:
Request:
curl --request POST \
--url https://sandbox.hifibridge.com/v2/offramps/b838908b-95d0-4ebb-a2c6-8f0c142bcdd7/quote/accept \
--header 'accept: application/json' \
--header 'authorization: Bearer YOUR_API_KEY'
Response:
{
"transferType" : "OFFRAMP" ,
"transferDetails" : {
"id" : "b838908b-95d0-4ebb-a2c6-8f0c142bcdd7" ,
"status" : "CRYPTO_INITIATED" ,
"quoteInformation" : {
"rate" : "1.00" ,
"sendNet" : {
"amount" : "1.00" ,
"currency" : "usdc"
},
"receiveNet" : {
"amount" : "1.00" ,
"currency" : "usd"
}
}
}
}
✅ Quote accepted! The status has changed to CRYPTO_INITIATED.
Monitor Status
Status Progression:
OPEN_QUOTE - Quote generated, waiting for acceptance
CRYPTO_INITIATED - Processing crypto conversion
CRYPTO_PENDING - Waiting for blockchain confirmation
FIAT_PENDING - Converting to fiat
COMPLETE - Fiat sent to bank account
Monitor via:
Polling: Call Retrieve an offramp with the transaction ID
Webhooks: Subscribe to OFFRAMP.UPDATE events for real-time notifications
In production, sending money may take 1-3 business days for the fiat to arrive
in the user’s bank account. In sandbox, completion is typically instant.