Use Case Overview
This recipe demonstrates a split payment flow where:- ✅ Users deposit USD into dedicated virtual accounts
- ✅ USD automatically converts to USDC stablecoin
- ✅ Payments are split among multiple recipients using batch transfers
- ✅ Operational overhead is minimized through automation
- Paying multiple recipients at once – Take funds from a single wallet and send payouts to several recipients in one batch instead of issuing individual transfers.
- Sharing revenue between parties – Distribute a single pool of funds across different stakeholders (for example, a primary recipient plus one or more collaborators).
- Operational or treasury fan-out – Move balance from a central wallet into multiple wallets (such as teams, regions, or projects) in a single operation.
- Scheduled payout runs – Periodically aggregate earnings and use a batch transfer to pay out all recipients for a given period in one shot.
- Distributing rewards or incentives – Send rewards, rebates, or incentive payments to many users at the same time from one funding source.
What you’ll build
Here’s what we’ll accomplish in this recipe:- Add Virtual Account - Set up account for collecting USD payments that convert to USDC
- Split Payments - Execute on-demand split payments with batch transfers
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.
Prerequisites
Before you begin, make sure you have: User A – Individual user created and KYC submitted withstatus = active
For a complete guide on user onboarding, see:
Add Virtual Account
The sender needs a Virtual Account for collecting the payment to be split. This is a bank account number automatically created by HIFI that users can deposit USD into. When fiat arrives, it’s automatically converted to USDC and ready for distribution.Virtual Account for Split Payments: Each virtual account comes with unique
ACH/wire/RTP details you can surface in your app. When deposits arrive, HIFI
detects the funds and applies your conversion settings (e.g., USD → USDC). You
can then use settlement rules for automatic splitting or batch transfers for
on-demand splitting.
Create Virtual Account
Create Virtual Account
Request:Response:
Split Payments with Batch Transfers
Batch transfers let you manually initiate split payments with full control over amounts and recipients for each transaction. You decide when to split and can customize the distribution for each payment.When to Use Batch Transfers: Use batch transfers when you need: -
On-demand split payments that vary per transaction - Dynamic recipient lists
that change based on the payment - Conditional logic before splitting (e.g.,
verify amounts, check balances) - Bill payments where amounts differ each time
- One-time or irregular split payments Perfect for bill payment services, dynamic revenue sharing, or variable expense splits.
Create Batch Transfer
Create Batch Transfer
Create a batch transfer to split a payment among multiple recipients in a single transaction using the Create Batch Transfer endpoint.In this example, we’ll split a payment to three different recipients with 10 USDC each from the user’s wallet.Request:Request Fields:Response:✅ Batch transfer created!Response Fields:Understanding the Batch Transfer:In this example:For a complete guide on batch transfers including advanced features like approval workflows and error handling, see our Batch Transfers Guide.
Unique identifier (UUID) for this batch transfer request to ensure
idempotency.
Cryptocurrency to transfer. Use
usdc for USD Coin.Blockchain network for the transfer. Options:
POLYGON, ETHEREUMSource of the batch transfer (the user making the split payment).
Destination configuration containing the batch of recipients.
Whether the batch transfer requires manual approval before execution. Set to
false for automatic processing.Unique batch transfer ID. Save this to monitor the batch status and
retrieve transaction details.
Transfer type. Always
WALLET.TRANSFER.BATCH for batch transfers.Current batch status. Starts as
CREATED, then progresses through: -
CREATED - Batch transfer initiated - PENDING - Being processed on
blockchain - COMPLETED - All payments successfully delivered - FAILED -
One or more payments failed (check individual statuses)Blockchain network where the transfer is being executed.
Cryptocurrency being transferred.
Smart contract address handling the USDC transfers on the blockchain.
Source details showing the user’s wallet information.
Destination details showing all recipients in the batch.
Transaction receipt information.
- Source: User’s wallet (
0x63dA...C338) with 30+ USDC available - Batch: 3 recipients receiving 10 USDC each
- Total: 30 USDC distributed in a single blockchain transaction
- Cost Savings: One transaction fee instead of three separate transactions
Monitoring Batch Transfers: Subscribe to
WALLET.TRANSFER.BATCH.UPDATE
webhook events to receive real-time notifications as the batch progresses. You
can also poll the Retrieve Batch
Transfer
endpoint to check individual payment statuses within the batch.🎉 Congratulations!
You’ve successfully built a split payment system! By following this recipe, you can now:- ✅ Create virtual accounts for collecting payments with automatic conversion
- ✅ Execute batch transfers for on-demand split payments
- ✅ Reduce operational overhead with automated or consolidated transactions
Next Steps
Ready to scale your split payment service? Here’s what to explore next:- Batch Transfers Guide - Learn about batch transfers with approval workflows, failure handling, and advanced features
- Webhooks - Set up real-time notifications for deposit detection, conversion completion, and split payment distribution
- Virtual Accounts Guide - Learn about monitoring deposits and handling multiple virtual accounts per user
- API Reference - Explore all available endpoints and parameters for advanced features