Before you can trade, your user’s wallet needs funds. This guide covers how deposits and withdrawals work for each venue.
How Deposits Work
Each venue uses a different blockchain and stablecoin. When you create a user, the API generates a wallet address for each venue. You deposit by sending the right token to the right address.
| Venue | Token | Chain | Wallet Field |
|---|
| Polymarket | USDC.e (Bridged USDC) | Polygon | polymarketWalletAddress |
| Predict.fun | USDT (BEP-20) | BSC | predictWalletAddress |
Deposit to Polymarket
You have two options for funding a Polymarket wallet.
Option 1: Send USDC.e directly on Polygon
Send USDC.e to the user’s polymarketWalletAddress on Polygon.
Only send USDC.e (Bridged USDC) — not native USDC. Sending native USDC to your Polymarket wallet will result in unusable funds. The correct contract address is 0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174.
Option 2: Bridge from another chain
If your funds are on Ethereum, Solana, Bitcoin, or another chain, use the Bridge API to get deposit addresses. Funds are automatically converted to USDC.e and credited to the Polymarket wallet.
import requests
HEADERS = {"x-api-key": "YOUR_API_KEY"}
wallet = "0x1234...5678" # polymarketWalletAddress from Create User
deposit_info = requests.get(
"https://trade.predexon.com/api/bridge/deposit",
headers=HEADERS,
params={"wallet": wallet}
).json()
print(f"EVM deposit address: {deposit_info['depositAddresses']['evm']}")
print(f"Solana deposit address: {deposit_info['depositAddresses']['solana']}")
print(f"Bitcoin deposit address: {deposit_info['depositAddresses']['bitcoin']}")
Send any supported token (USDC, ETH, SOL, BTC, etc.) to the corresponding deposit address. The bridge handles the conversion automatically.
Supported source chains:
| Chain | Deposit Address | Tokens |
|---|
| Ethereum | depositAddresses.evm | USDC, ETH, USDT |
| Arbitrum | depositAddresses.evm | USDC, ETH |
| Base | depositAddresses.evm | USDC, ETH |
| Solana | depositAddresses.solana | USDC, SOL |
| Bitcoin | depositAddresses.bitcoin | BTC |
Check minDepositUsd in the response before sending — deposits below the minimum may not be processed. Deposit addresses are cached for 15 minutes and can be reused.
Deposit to Predict.fun
Send USDT (BEP-20) directly to the user’s predictWalletAddress on BSC. No bridge is needed.
| Property | Value |
|---|
| Token | USDT (Tether USD) |
| Chain | BNB Smart Chain (BSC) |
| Standard | BEP-20 |
| Contract | 0x55d398326f99059fF775485246999027B3197955 |
Only send BEP-20 USDT on BSC. Sending tokens on the wrong chain (e.g., ERC-20 USDT on Ethereum) will result in lost funds.
Verify Your Deposit
After sending funds, check that they arrived using Get Balance:
user_id = "YOUR_USER_ID"
balance = requests.get(
f"https://trade.predexon.com/api/users/{user_id}/balance",
headers=HEADERS
).json()
for b in balance["balances"]:
print(f"{b['venue']}: ${b['available']} available, ${b['locked']} locked")
On Predict, the locked field reflects USDT committed to resting limit buy orders. On Polymarket, locked is always 0.
Withdraw Funds
To move funds out of a trading wallet to an external address, use the Withdraw endpoint.
Before withdrawing
- Cancel open orders (Predict) — Predict locks collateral for open buy orders. Use Cancel All Orders to release locked USDT before withdrawing. Polymarket does not lock funds for limit orders, so this step is only necessary for Predict.
- Redeem resolved positions — winning positions need to be redeemed before the funds appear in your balance.
- Check available balance — verify you have sufficient funds with Get Balance.
Polymarket withdrawal
result = requests.post(
f"https://trade.predexon.com/api/users/{user_id}/withdraw",
headers=HEADERS,
json={
"venue": "polymarket",
"amount": "100.00",
"destinationAddress": "0x9876...4321",
"chain": "polygon"
}
).json()
print(f"Tx: {result['transactionHash']}")
print(f"Status: {result['status']}")
This sends USDC.e on Polygon to the destination address.
Predict.fun withdrawal
result = requests.post(
f"https://trade.predexon.com/api/users/{user_id}/withdraw",
headers=HEADERS,
json={
"venue": "predict",
"amount": "25.00",
"destinationAddress": "0x742d...f44e",
"chain": "bsc"
}
).json()
print(f"Tx: {result['transactionHash']}")
print(f"Status: {result['status']}")
This sends BEP-20 USDT on BSC to the destination address.
Ensure the destination address matches the chain. Sending to the wrong address format may result in lost funds.
Next Steps