Send crypto from customer wallet
Broadcasts a signed blockchain transaction from the customer’s derived address at the given index.
amount format (default): Pass the value as a JSON string representing a human-readable
coin amount. A bare integer and a decimal mean the same thing — whole coins:
"2.5"on ETH → 2.5 ETH"100"on USDT → 100 USDT"0.001"on BTC → 0.001 BTC
⚠️ Breaking change (2026-07): a bare integer like
"5"is now 5 whole coins (e.g. 5 BTC), NOT raw base units. Integrations that previously sent pre-converted base units (wei/lamports/satoshis/drops) as a bare integer must now set"unit": "base"(below), or send a decimal string. This removes the prior footgun where"100"USDT silently meant dust.
Base units (opt-in): set "unit": "base" to pass a pre-converted positive integer in the
smallest unit (wei/satoshi/lamport/drop); it is used as-is. A decimal point is rejected in this mode.
Decimal precision per network/currency (used for decimal→base conversion):
| Network | Currency | Decimals | Example: 1 unit in base units |
|---|---|---|---|
| ETH | ETH | 18 | "1000000000000000000" |
| ETH | USDT, USDC | 6 | "1000000" |
| BSC | BNB | 18 | "1000000000000000000" |
| BSC | USDT, USDC | 18 | "1000000000000000000" |
| POL | POL | 18 | "1000000000000000000" |
| POL | USDT, USDC | 6 | "1000000" |
| TRX | TRX, USDT | 6 | "1000000" |
| SOL | SOL | 9 | "1000000000" |
| SOL | USDC | 6 | "1000000" |
| BTC, LTC, BCH | native | 8 | "100000000" |
| XRP | XRP | 6 | "1000000" |
BSC USDT/USDC = 18 decimals (Binance-pegged). POL USDT/USDC = 6 decimals (Polygon PoS bridged tokens).
XRP note: for XRP transfers you may pass destination_tag (integer). Most exchanges require
a destination tag to credit XRP deposits — omitting it can make the funds uncreditable. The server
also rejects a first payment to an unactivated destination below the ~1 XRP base reserve.
Requires wallet:transfer permission.
Blocked combinations — returns 400:
SOL+USDT— USDT does not exist as a native SPL token on SolanaTRX+USDC— USDC does not exist as a TRC-20 token on Tron
Fee collection: If the merchant has configured a WaaS fee (via POST /api/v1/settings/waas/fees),
the fee is automatically deducted from the transfer amount and sent on-chain to the merchant’s
configured address. The response includes fee_amount and fee_tx_hash when a fee was collected.
For UTXO chains (BTC/LTC/BCH) the fee is a third output in the same transaction (fee_tx_hash is empty).
For all other chains the fee is a second transaction.
Authorizations
Business API key for server-to-server integrations.
Key prefix determines the environment — no separate flag needed:
test_sk_* = sandbox/testnet, live_sk_* = production/mainnet.
Path Parameters
Body
Amount to transfer as a string. By default this is a HUMAN-READABLE coin amount — "2.5" = 2.5 coins, "100" = 100 coins (a bare integer and a decimal mean the same thing). Set unit: "base" to instead pass a pre-converted integer in the smallest unit (wei/satoshi/lamport/drop). Must be positive; zero, negative, or unparseable values return 400.
"2.5"
"USDT"
BTC, BCH, LTC, BSC, ETH, POL, TRX, SOL, XRP XRP only. Optional destination tag — REQUIRED by most exchanges to credit an XRP deposit. Ignored for non-XRP networks.
12345
Address derivation index
Interpretation of amount. "decimal" (default) = human-readable coin amount. "base" = raw base units (integer only, used as-is). Omit for the safe default.
decimal, base Response
Transfer submitted to the network
Amount sent to recipient in base units (gross minus fee)
"USDT"
Fee collected in base units (omitted if no fee configured)
"1000000"
Hash of the fee collection transaction (omitted if no fee). Empty string for UTXO chains (BTC/LTC/BCH) where the fee is part of the main transaction.
Sender address (derived customer wallet address)
Network gas fee paid in base units (native token)
"ETH"
"pending"
Recipient address
Main transaction hash
"0xabc123..."

