POST /dac/v1/transaction endpoint to move funds across all supported blockchains — whether you are sending to an external wallet, shifting balances between sub-accounts, or pushing assets to a connected exchange. This guide covers every parameter you need, explains destination and source types, shows you how to estimate fees before committing, and explains how to use idempotency keys so retried requests never result in a double-spend.
Overview
Submitting a transaction requires four core fields: theasset ticker, the amount, a source_type, and a destination_type. Additional fields control fee behaviour, AML tracking, bulk payouts, and idempotency.
Endpoint: POST https://api.finrock.io/dac/v1/transaction
Destination Types
Thedestination_type field tells Finrock where the funds are going. Choose the value that matches your recipient:
EXTERNAL
Send to any address outside your Finrock workspace — for example, a customer’s self-custody wallet or a third-party exchange deposit address.
INTERNAL
Move funds into your own sub-account within the workspace — for example, pulling balance from a connected exchange into your custody wallet.
SUBACCOUNT
Transfer to a different sub-account within the same workspace — for example, moving funds from a trading desk sub-account to a treasury sub-account.
EXCHANGE
Send funds to a connected exchange — for example, depositing collateral to Binance or Kraken from your Finrock wallet.
Source Types
Thesource_type field tells Finrock where the funds originate:
Use
source_id to specify a particular address or address label within your workspace when you want to spend from a specific balance rather than the aggregate wallet balance. For XRP and XLM, use source_tag to identify the originating address tag.
Creating a Transaction
The example below sends 100 USDT on the Tron network to an external wallet address:All Request Parameters
Sending the Maximum Balance
Setmax_amount: true to instruct Finrock to calculate the maximum sendable amount after network fees and deduct accordingly. Omit amount when using this flag:
Bulk UTXO Payouts
For UTXO-based chains (Bitcoin, Litecoin, Dogecoin, Dash, Bitcoin Cash), you can send to multiple recipients in a single transaction using thedestinations array instead of a single destination_id. This significantly reduces total network fees compared to sending individual transactions.
The
destinations array is supported only on UTXO chains (BTC, LTC, DOGE, DASH, BCH). For EVM, Tron, Solana, and other account-based chains, use a single destination_id.AML Tracking with aml_cid
If you have AML screening enabled, pass your internal customer identifier in the aml_cid field. Finrock forwards this value to the AML provider (Chainalysis) so every transaction is linked to the correct subject in your compliance records:
Fee Estimation
Before submitting a high-value transaction, callPOST /dac/v1/estimate-fee to preview the expected network fee without committing the transaction:
fee_rate unit depends on the blockchain. Use this reference table:
Idempotency with sequence_id
Network timeouts and application retries can cause your code to call the transaction endpoint more than once for the same intended transfer. Pass a unique sequence_id string with every transaction request. If Finrock receives a second request with the same sequence_id for the same sub-account, it returns the result of the original transaction instead of creating a new one.