POST /wallet/send
Initiate an on-chain transfer using a wallet you manage.
Request (single-output)
Request (BTC multi-output)
For Bitcoin you can send to multiple recipients in one transaction. Provide a mapping of destination addresses to amounts and omit the top-levelamount
:
Field | Type | Required | Notes |
---|---|---|---|
api_key | string | ✓ | Customer API key. |
wallet_id | string | ✓ | Wallet ID (w_<uuid> ) or on-chain address. |
amount | number | ✓* | Natural units (ETH , BTC , TRX , or token units). Required for single-output sends; omit for BTC multi-output. |
destination | string or object | ✓ | Single-output: recipient address as a string. BTC multi-output: object mapping { "address": amount } . |
asset | string | ✓ | Supported values: |
• ETH wallets → ETH , USDC , USDT | |||
• BTC wallets → BTC | |||
• Tron wallets → TRX , USDT | |||
btc_fee | string | ✕ | Optional BTC fee tier. Accepted values: low , normal , high . Defaults to the provider recommendation. May also accept a sat/vByte or sat/kByte string. |
eth_fee | string | ✕ | Optional Ethereum gas limit. Defaults to 21,000 for native ETH transfers and 65,000 for ERC-20 transfers. |
eth_max_priority_fee_per_gas | string | ✕ | Optional for Ethereum. Tip paid to validators, expressed in wei. Must not exceed eth_max_fee_per_gas . |
eth_max_fee_per_gas | string | ✕ | Optional for Ethereum. Total fee cap per gas unit in wei. Defaults to the API-estimated value when omitted. |
metadata | object | ✕ | Optional JSON object stored on the resulting transaction. Keys must be strings and data must be JSON serializable. |
Response
Successful broadcast:result
flag to decide whether to retry or alert an operator. A value of "ok"
always includes the blockchain transaction hash in tx_id
; a value of "fail"
contains the upstream provider’s error string. Even when the result is "ok"
, final settlement still depends on miners or validators confirming the transaction on-chain.
Errors
Status | Payload | When it happens |
---|---|---|
400 | { "error": "Missing required fields" } | Missing body parameters. |
403 | { "error": "API key is not valid" } | API key fails validation. |
404 | { "result": "not_found" } | Wallet does not exist or isn’t owned by your account. |
400 | { "error": "Wallet is not a BTC wallet" } | Attempting to send BTC assets from a non-BTC wallet. |
500 | { "error": "<message>" } | Unexpected service error. |
Bitcoin UTXO handling
When broadcasting BTC, 1151 first tries to cover the transfer amount(s) and miner fee with a single UTXO from the wallet. If no individual output is large enough, the platform selects the smallest possible combination of UTXOs to fulfill the spend. Any change output — including the remainder from consolidated UTXOs — is automatically returned to the wallet’s receiving address as a single UTXO.Operational tips
- ERC-20 and TRC-20 transfers require the wallet to maintain enough native token (ETH/TRX) for gas or energy.
- When customizing Ethereum gas, ensure
eth_max_fee_per_gas
is greater than or equal toeth_max_priority_fee_per_gas
; otherwise broadcasts will fail client-side. - If you omit Ethereum gas overrides, the API uses current network estimates. Supply all three Ethereum-specific parameters when you want a fully custom gas configuration.
- Metadata travels with the transaction so you can look it up later via
/transaction/get
or the SDK helpers.
SDK equivalents
- JavaScript:
client.sendFromWallet({ walletId, asset, amount?, destination?, destinations?, btcFee?, ethFee?, ethMaxPriorityFeePerGas?, ethMaxFeePerGas?, metadata? })
orwallet.send({ asset, amount?, destination?, destinations?, ... })
- Python:
client.send_from_wallet(wallet_id, amount, destination, asset, metadata=None, btc_fee=None, ...)
orwallet.send(amount=..., destination=..., asset=..., ...)
. For BTC multi-output in Python, pass a mapping fordestination
and omitamount
.