Overview
Bitcoin, Cardano and other UTXO-based assets natively support paying multiple recipients in a single transaction. With Batched transactions you can send funds to many recipients in one on-chain transaction by passing multiple entries in the destinations array of the standard createTransaction API call. Because a UTXO transaction can carry many outputs, all of the transfers are included in one transaction and settle together.
Consolidating multiple transfers into one transaction minimizes fees. A batched transaction carries a single set of metadata and a single on-chain footprint, so it is more cost effective than sending one transaction per recipient.
This is especially useful for payouts, treasury distributions, and high volume withdrawal flows, and for moving funds to several targets at once; for example, a withdrawal wallet and cold storage in the same transaction.
Key benefits
- Atomicity: all outputs are part of one Bitcoin transaction, so they confirm together. You never end up with a partially completed payout run.
- Lower fees: consolidating transfers into a single transaction reduces the total mining fee compared with sending one transaction per-recipient.
- Works with Bitcoin and other UTXO-based assets.
- Flexible destinations: a single transaction can pay vault accounts, exchange accounts, whitelisted external addresses, one time addresses, and cold storage - together.
Prerequisites
Before you can execute a Batched transaction, make sure the following are in place:
- Your source vault holds a sufficient confirmed balance of the UTXO-based asset you want to send.
- Your Policy covers outgoing transfers from the source vault.
Current limitations
- API only: batched transactions are created through the API. In the Console they appear in the transaction history, labeled as Multi-destination, but there is no Console flow to build them.
- Up to 250 UTXOs (inputs) can be selected per transaction, which caps the maximum amount you can send in a single batch. Check the limit with the maximum spendable amount endpoint before you build a batch.
- When batching at scale, stay within the Bitcoin limit of 25 chained unconfirmed transactions. Pace your submissions; for example, one batch every 30 seconds, so that queued batches confirm before the chain of unconfirmed transactions grows too long.
How to send a Batched transaction
Use the standard create transaction endpoint and provide a destinations array instead of a single destination.
Endpoint
POST /v1/transactions
Request body
{
"operation": "TRANSFER",
"assetId": "BTC",
"source": {
"type": "VAULT_ACCOUNT",
"id": "1"
},
"destinations": [
{
"amount": "0.0005",
"destination": {
"type": "VAULT_ACCOUNT",
"id": "2"
}
},
{
"amount": "0.0005",
"destination": {
"type": "VAULT_ACCOUNT",
"id": "3"
}
},
{
"amount": "0.0005",
"destination": {
"type": "ONE_TIME_ADDRESS",
"oneTimeAddress": {
"address": "bc1qexampleaddressxxxxxxxxxxxxxxxxxxxxxxxx"
}
}
}
]
}
Frequently asked questions
What happens if one transfer in the batch fails?
A Bitcoin transaction is atomic. It either confirms with all of its outputs or it does not confirm at all. There is no partial state, so you never end up with some recipients paid and others not.
Which assets are supported?
Bitcoin and other UTXO-based assets.
How many recipients can I include in one batch?
There is no fixed cap on the number of destinations. The practical limit is the transaction size, and the 250 input limit. Larger batches produce a larger transaction and a higher mining fee.
Can I send to different destination types in one batch?
Yes. A single transaction can include vault accounts, exchange accounts, whitelisted external addresses, one time addresses, and cold storage - together.
How does this reduce fees?
A batched transaction carries a single set of metadata and a single on-chain footprint, so it is more cost effective than sending a separate transaction to each recipient.
Why is there a 250 input limit?
Every UTXO you spend adds to the transaction size. Fireblocks selects up to 250 confirmed inputs per transaction, the smallest first by default. If a single transaction cannot cover the amount you need to send, split the payout across multiple batches or consolidate inputs first.
Can I see these transactions in the Console?
Yes. They appear in a transaction history labeled Multi-destination. You can create them via the API.