Skip to main content
This guide uses the accounts path (/api/accounts/*). Legacy /api/users/* callers can substitute {userId} for {accountId} throughout — the flows are the same.

How deposits work

Each venue uses a different blockchain and stablecoin. When you enable a venue on an account, the API provisions a wallet and returns its on-chain address. You deposit by sending the right token to that address.
VenueTokenChainContract
PolymarketUSDC.e (Bridged USDC)Polygon0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174
PredictUSDT (BEP-20)BSC0x55d398326f99059fF775485246999027B3197955
OpinionUSDT (BEP-20)BSC0x55d398326f99059fF775485246999027B3197955
LimitlessUSDC (native)Base0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913
Fetch the wallet address via Get Account — the venue entry carries the address field once setup completes.
import requests

HEADERS = {"x-api-key": "YOUR_API_KEY"}
account = requests.get(
    f"https://trade.predexon.com/api/accounts/{account_id}", headers=HEADERS,
).json()
wallet = account["venues"]["polymarket"]["address"]

Deposit to Polymarket

Option 1: Send USDC.e directly on Polygon

Send USDC.e to the Polymarket wallet address.
Only send USDC.e (Bridged USDC) — not native USDC. Sending native USDC to your Polymarket wallet results in unusable funds. The correct contract is 0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174.

Option 2: Bridge from another chain

The Bridge API returns deposit addresses for Ethereum, Solana, and Bitcoin — send any supported token and the bridge converts it to USDC.e on Polygon automatically.
deposit_info = requests.get(
    "https://trade.predexon.com/api/bridge/deposit",
    headers=HEADERS,
    params={"wallet": wallet},
).json()

print(f"EVM:    {deposit_info['depositAddresses']['evm']}")
print(f"Solana: {deposit_info['depositAddresses']['solana']}")
print(f"BTC:    {deposit_info['depositAddresses']['bitcoin']}")
Source chainDeposit fieldTokens
Ethereum / Arbitrum / BasedepositAddresses.evmUSDC, ETH, USDT
SolanadepositAddresses.solanaUSDC, SOL
BitcoindepositAddresses.bitcoinBTC
Check minDepositUsd in the response before sending. Deposit addresses are cached for ~15 minutes and can be reused.

Deposit to Predict or Opinion

Both use BEP-20 USDT on BSC. Send USDT directly to the venue’s wallet address — no bridge needed.
Only send BEP-20 USDT on BSC. Sending ERC-20 USDT on Ethereum (or any other token/chain combination) results in lost funds.

Deposit to Limitless

Send native USDC on Base directly to the Limitless wallet address. No bridge.
Only send native USDC on Base (0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913). Don’t send bridged USDC variants or other chains’ USDC — those will be unrecoverable.

Verify your deposit

Call Get Balance:
balance = requests.get(
    f"https://trade.predexon.com/api/accounts/{account_id}/balance",
    headers=HEADERS,
).json()

for b in balance["balances"]:
    print(f"{b['venue']}: available={b['available']}, locked={b['locked']}")
On Predict and Opinion, locked reflects USDT committed to resting limit buy orders. On Polymarket, locked is always 0.

Withdraw funds

Use Withdraw to send funds to an external address.

Before withdrawing

  1. Cancel open orders (Predict / Opinion / Limitless) — these venues lock collateral for resting buy orders. Use Cancel All Orders to release the locked stablecoin first. Polymarket does not lock funds for limit orders.
  2. Redeem resolved positionsRedeem Position moves winnings into your available balance.
  3. Check balance — verify sufficient funds with Get Balance.

Polymarket

result = requests.post(
    f"https://trade.predexon.com/api/accounts/{account_id}/withdraw",
    headers={**HEADERS, "Content-Type": "application/json"},
    json={
        "venue": "polymarket",
        "amount": "100.00",
        "destinationAddress": "0x9876543210abcdef9876543210abcdef98765432",
        "chain": "polygon",
    },
).json()
Sends USDC.e on Polygon to the destination.

Predict / Opinion

result = requests.post(
    f"https://trade.predexon.com/api/accounts/{account_id}/withdraw",
    headers={**HEADERS, "Content-Type": "application/json"},
    json={
        "venue": "predict",  # or "opinion"
        "amount": "25.00",
        "destinationAddress": "0x742d35Cc6634C0532925a3b844Bc454e4438f44e",
        "chain": "bsc",
    },
).json()
Sends BEP-20 USDT on BSC to the destination.

Limitless

result = requests.post(
    f"https://trade.predexon.com/api/accounts/{account_id}/withdraw",
    headers={**HEADERS, "Content-Type": "application/json"},
    json={
        "venue": "limitless",
        "amount": "50.00",
        "destinationAddress": "0x9876543210abcdef9876543210abcdef98765432",
        "chain": "base",
    },
).json()
Sends native USDC on Base to the destination.
Ensure the destination address matches the chain. Sending to a wrong-format address may result in lost funds.

Next Steps

Placing Trades

Start trading with your funded wallet

Fees & Monetization

Set up partner fees to monetize your app