Skip to main content
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.
VenueTokenChainWallet Field
PolymarketUSDC.e (Bridged USDC)PolygonpolymarketWalletAddress
Predict.funUSDT (BEP-20)BSCpredictWalletAddress

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:
ChainDeposit AddressTokens
EthereumdepositAddresses.evmUSDC, ETH, USDT
ArbitrumdepositAddresses.evmUSDC, ETH
BasedepositAddresses.evmUSDC, ETH
SolanadepositAddresses.solanaUSDC, SOL
BitcoindepositAddresses.bitcoinBTC
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.
PropertyValue
TokenUSDT (Tether USD)
ChainBNB Smart Chain (BSC)
StandardBEP-20
Contract0x55d398326f99059fF775485246999027B3197955
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

  1. 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.
  2. Redeem resolved positions — winning positions need to be redeemed before the funds appear in your balance.
  3. 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