Use Case Overview
This recipe demonstrates a marketplace payment where:- ✅ User A deposits USD from their bank account
- ✅ USD automatically converts to USDC stablecoin
- ✅ USDC is transferred to User B wallet
- ✅ USDC is converted to HKD and sent to User B’s bank account
What you’ll build
Here’s what we’ll accomplish in this recipe:- Generate API Keys - Set up authentication for HIFI API
- Create Individual User A (Buyer) - Onboard US customer and complete KYC for USD rail
- Add Virtual Account - Set up account for USD deposits that convert to USDC
- Create Business user B (Seller) - Onboard Hong Kong seller (or use existing business)
- Execute Payment - Send USDC from User A wallet to User B wallet
- Initiate Offramp - Convert crypto funds to User B HKD bank account
All examples in this guide use the sandbox environment. When you’re ready for
production, simply replace the sandbox URL with the production endpoint and
use your production API keys.
Generate API Keys
Access to the HIFI API requires authentication via API keys. Generate your keys from the HIFI Dashboard before making any API calls. Be sure to copy the key immediately as it’s only shown once. For a complete guide on API authentication, see our Authentication Documentation.Using Your API Key
Using Your API Key
Include your API key in the
Authorization header of all API requests:Create User A (Buyer)
The buyer needs a verified user account to access fiat rails and make purchases. Every user must accept HIFI’s Terms of Service and complete KYC verification before they can move money between fiat and crypto.Complete Onboarding Guide: For a comprehensive walkthrough of user
onboarding and KYC verification, see our User Guide.
Generate Terms of Service Link
Generate Terms of Service Link
Request:Response:
Create User
Create User
Request:Response:
Update KYC Information
Update KYC Information
Request:Response:
Submit KYC for USD Rail
Submit KYC for USD Rail
Request:Response:
Add Virtual Account (User A)
Now that User A has passed KYC, create a Virtual Account for onramping. This is a bank account number automatically created by HIFI that User A can deposit USD into. When fiat arrives, it’s automatically converted to USDC and sent to their wallet.Complete Virtual Account Guide: For more details on virtual accounts and
onramping, see our Virtual Accounts Guide.
Create Virtual Account
Create Virtual Account
Request:Response:
Create Business B (Seller)
The recipient business (Business B in Hong Kong) needs a wallet address to receive the payment. Follow the same business creation flow as User A, but complete KYB for the appropriate Hong Kong rail.Using an Existing Business: If Business B already exists in your system,
you can skip business creation and just ensure they have an active wallet
address and Hong Kong bank account for later offramping. You’ll need either
their userid or walletaddress for the crypto transfer.
Required Information
To complete this recipe, you’ll need:- Business B’s
userId- From creating their business account - Business B’s
walletAddress- Provisioned upon creating the business user - Business B’s HKD
accountId- From adding their Hong Kong bank account
- Use Hong Kong business information and address details
- Submit KYB for the Hong Kong rail
- Add an Offramp Account (Hong Kong bank account) instead of a Virtual Account
Execute Payment
Now you can send the wallet transfer payment from User A (US) to Business B (Hong Kong). Create a crypto transfer that sends USDC from User A’s wallet to Business B’s wallet.Transfers can be sent to other HIFI users or external wallet addresses. For
this example, we will send to another HIFI user (Business B).
- Create crypto transfer request - Mark
requireApprovalas true in the request fields (User A) - Accept the transfer approval - Accept the approval through the Approve a transfer endpoint (Business B)
Create Crypto Transfer Request
Create Crypto Transfer Request
Create a crypto transfer request that requires approval by setting Request Fields:Response:Response Fields:
👉 Transfer Approvals Guide
requireApproval: true in the Create a Crypto Transfer endpoint.Request:Unique identifier (UUID) for this transfer request to ensure idempotency.
Source cryptocurrency (e.g., usdc, usdt).
Amount of USDC to send from User A’s wallet.
Blockchain network (e.g., POLYGON, ETHEREUM).
Source of the transfer (User A).
Destination of the transfer (Business B)
Unique crypto transfer transaction ID.
Transfer type.
Current status.
PENDING_APPROVAL means you have an active transfer approval
waiting to be accepted.Source details showing User A’s wallet.
Destination details showing Business B’s wallet info.
Amount of USDC being transferred.
Transfer approval details.
Understanding Transfer Approvals
After submitting a transfer request withrequireApproval: true:- The transfer status becomes PENDING_APPROVAL and does not execute
- Dashboard admins receive email notifications about the pending approval
- Authorized admins review and either approve or reject the transfer
- If approved → transfer executes normally. If rejected, transfer is cancelled
👉 Transfer Approvals Guide
Execute Offramp
With the approved transfer, Business B now has everything they need to transfer the USDC funds from their wallet into their HKD bank account. This is a two-step process:- Create offramp request - Get a quote for the conversion
- Accept the quote - Execute the payment
Required Information
In order to execute the offramp and complete this recipe, follow these steps:- Create an offramp request with the source (wallet, chain, amount) and destination (fiat account), optionally including developer fees.
- Review the returned quote—rate, fees, send/receive amounts, and expiration—in
transferDetails.quoteInformation. - Confirm status is
OPEN_QUOTEand savetransferDetails.idto track and accept the quote. - Accept the quote via
POST /v2/offramps/{id}/quote/acceptto convert stablecoins to fiat and initiate payout. - Monitor statuses through crypto and fiat phases (e.g.,
CRYPTO_INITIATED→ completion) using the receipt fields or webhooks.
🎉 Congratulations!
You’ve successfully completed a marketplace payment! By following this recipe, you can now:- ✅ Generate API keys and authenticate with HIFI
- ✅ Onboard users and complete KYC for multiple currency rails
- ✅ Create virtual accounts for fiat-to-crypto conversion
- ✅ Execute marketplace payments with transfer approvals
- ✅ Provide transparent fee structures and quote expiration
Next Steps
Ready to build a full marketplace payment platform? Here’s what to explore next:- Webhooks - Set up real-time notifications for transaction status updates and user engagement
- Offramp Guide - Deep dive into offramp transactions and compliance requirements
- Onchain Transfers - Learn how to initiate and track onchain wallet-to-wallet transfers
- Transfer Approvals - Configure optional approvals for higher-control transfer workflows
- Error Handling - Implement robust error handling for failed transactions and expired quotes
- API Reference - Explore all available endpoints and parameters for advanced features