withdraw3
Sends USDC only from the perp account to an Arbitrum address via Bridge2. The frontend never calls the Bridge2 contract for this path — the node records the withdrawal and Bridge2 releases USDC after the protocol delay.
Direct EIP-712, signed by the account key. An agent cannot withdraw.
withdraw3Withdraw USDC from the perp account to an Arbitrum address.Direct EIP-712, signed by the account key
Decimal USDC amount. Minimum is `2`. A flat 1 USDC withdrawal fee is charged on top of the amount sent out.
TxFlow signing API version.
TxFlow chain ID.
Arbitrum address that receives USDC. Must be non-zero.
Fresh millisecond timestamp. Direct EIP-712 actions carry the nonce inside the action as well as in the outer payload; the two must match.
Hex string (no `0x`) of the EVM chain the wallet is connected to when signing. Testnet Bridge2 is Arbitrum Sepolia (`421614` → `66eee`); mainnet is Arbitrum One. Distinct from the action `chainId`, which is the TxFlow chain.
TxFlow-side USDC contract. Withdrawals are USDC-only. The TypeScript SDK fills this from the network preset.
TxFlow network name used by the EIP-712 action and domain.
Must be `withdraw3`.
"withdraw3"curl -X POST https://rpc.txflow-testnet.xyz/exchange \
-H "Content-Type: application/json" \
-H "x-api-version: 2026-08-16" \
-d '{
"action": {
"type": "withdraw3",
"txflowNetwork": "TxFlow-Testnet",
"chainId": 2511,
"apiVersion": 1,
"destination": "0x0202020202020202020202020202020202020202",
"signatureChainId": "66eee",
"tokenAddress": "0xd04f0d19E8FbA49cfA541E272F9C60a2ad720464",
"amount": "10",
"nonce": 1757992743994
},
"signature": {
"r": "0x<r>",
"s": "0x<s>",
"v": 27
},
"nonce": 1757992743994,
"vaultAddress": null,
"signatureChainId": null
}'`0` on success.
The action's internal name, which does not always match the request `type`.
"Withdraw3"A rejected request returns `err` with a non-zero `code` and the reason in `message` (or `response`).
"ok"{
"status": "ok",
"code": 0,
"data": {
"type": "Withdraw3",
"data": {
"statuses": [
"success"
]
}
}
}The TypeScript SDK fills tokenAddress from the network preset (TXFLOW_USDC_TOKEN_ADDRESS). Callers only supply destination, amount, and optionally which Arbitrum network the wallet is on.
Preconditions
| Constraint | Detail |
|---|---|
| Minimum amount | 2 USDC |
| Fee | Flat 1 USDC, charged regardless of destination chain in the product UI; this action itself always pays out on Arbitrum |
| Token | TxFlow USDC contract only — other assets go through tokenSend + TxRelay |
| Destination | Non-zero Arbitrum address |
signatureChainId on the action is a hex string of the wallet's connected EVM chain (Arbitrum Sepolia 421614 → 66eee on testnet). The action chainId remains the TxFlow chain (2511 / 869). The envelope may also set numeric signatureChainId for the EIP-712 domain.
Signing
Withdraw3(string txflowNetwork,address destination,string signatureChainId,address tokenAddress,string amount,uint64 nonce)See Signing. Multi-sig accounts cannot single-sign this action.
Next steps
Track status with userNonFundingLedgerUpdates. For Ethereum, Base, Polygon, Solana, or other non-Arbitrum destinations, use TxRelay deposit-address plus tokenSend instead of withdraw3.