Skip to main content
The withdraw endpoint lets you move pUSD, or any other ERC20 token held in your deposit wallet, to an external address on Polygon. This is how you take collateral out of the Bravado system, whether to return funds to a user in a white-label integration or to bridge assets elsewhere. Withdrawals are submitted on-chain by Bravado and confirmed before the response returns in most cases.
Withdrawals require the trade.withdraw scope on your API key. This scope is not included in trade.execute and must be explicitly granted. If you receive a 403 Forbidden response, contact your Bravado integration manager to enable withdrawals on your key.

POST /v2/trade/withdraw

Initiates an ERC20 transfer from your Bravado deposit wallet to a destination address on Polygon. Omit the token field to withdraw pUSD. Pass any ERC20 contract address in token to withdraw that asset instead, useful for recovering airdrops or other tokens that have accumulated in the wallet. Required headers

Request body

string
required
Destination Polygon wallet address. Must be a valid checksummed or lowercase Ethereum-format address (0x followed by exactly 40 hex characters). Bravado does not validate that the destination is a smart contract; verify the address carefully before submitting.
string
required
Decimal amount to withdraw as a string (e.g. "10.5", "250.00"). The value is interpreted in human-readable units, do not pass base units. For pUSD this is a dollar amount; for other tokens the unit matches the token’s standard denomination.
string
ERC20 contract address of the token to withdraw. Omit this field to withdraw pUSD (the default). To withdraw any other token, pass its Polygon contract address, you can find the address in the token field returned by GET /v2/trade/balances/withdrawable.

Response

string
Polygon transaction hash of the on-chain transfer. Present as soon as the transaction is broadcast.
string
Transaction confirmation state. STATE_CONFIRMED means the transaction was included in a block within the latency budget. STATE_PENDING means it was broadcast but not yet confirmed, reconcile via GET /v2/trade/activity.
string
Echo of the destination address.
string
Echo of the amount submitted.
string
Contract address of the token withdrawn. Returns the pUSD contract address even when the token field was omitted in the request.
If the on-chain transaction does not confirm within the Bravado latency budget, the response returns state: "STATE_PENDING" along with the broadcast transaction_hash. The transfer is still in flight, poll GET /v2/trade/activity?type=WITHDRAW and match on transaction_hash to confirm the final outcome. Do not resubmit with the same Idempotency-Key.

Example

Before withdrawing, call GET /v2/trade/balances/withdrawable to see available balances and confirm the exact token contract address for any non-pUSD asset. Sending to the wrong address or an unsupported token address is irreversible.