Developers
Withdrawals
Withdraw available USDC.e to any Polygon address with a signed WithdrawalIntent.
Request a withdrawal
POST /polymarket/withdrawals
{
"userAddress": "0x…",
"destinationAddress": "0x…", // optional; defaults to userAddress
"usdcAmount": "50.00", // dollars; will be capped at availableBalance
"signature": "0x…", // WithdrawalIntent — REQUIRED (no session shortcut)
"nonce": 8,
"deadline": 1700000000
}
→ { "withdrawalId": 555, "amount": "499500", "amountFormatted": "0.4995", "destinationAddress": "0x…", "status": "PENDING" }
amount in the response is the user payout in base units (the protocol withdraw fee has been deducted; check withdrawFee from GET /polymarket/balance/{user}). The withdrawal goes through PENDING → VENUE_WITHDRAW_INITIATED → LANDED → COMPLETED.
Hard-block conditions
The endpoint rejects when any of the following are true:
- A position is actively being liquidated for this user (
409). - The user's available balance is not
fresh— e.g. recently restarted backend, unsettled liquidation (503, retry after a few seconds). - Requested amount minus the protocol fee is non-positive.
Destination
Withdrawals are USDC.e on Polygon. There is no bridge step — the user receives USDC.e in the destination address, period.
List the user's withdrawals
GET /polymarket/withdrawals/{userAddress}
