Skip to main content
This guide covers the full trading workflow on the accounts path (/api/accounts/*). For the legacy /api/users/* path, see the legacy reference pages.

Find a market

Before placing a trade, you need an identifier for the outcome you want to trade. Every market in the Data API has a cross-venue stable identifier, the predexonId. Format: {venue}:{primaryId}[:{outcome}]. You can pass it directly to the Trading API — the server resolves it to venue-specific fields on the backend.
import requests
HEADERS = {"x-api-key": "YOUR_API_KEY"}

markets = requests.get(
    "https://api.predexon.com/v2/polymarket/markets",
    headers=HEADERS,
    params={"status": "active", "sort": "volume", "limit": 5},
).json()

for m in markets["markets"]:
    print(m["question"])
    for o in m["outcomes"]:
        print(f"  {o['label']}  predexonId={o.get('predexonId')}")

Using a market bag (fallback)

If the resolver is unavailable or you already have venue-specific fields on hand, pass a market bag. At least one of predexonId or market is required on every order / redeem request. Venues differ in which fields are required:
VenueRequired market fieldsNotes
PolymarkettokenIdEach outcome (Yes/No) has its own token ID.
PredicttokenId + marketIdBoth required — marketId is the numeric Predict market ID.
OpinionmarketId + outcomeoutcome (e.g., "Yes") targets a specific side; tokenId may also be accepted when trading a specific outcome.
LimitlesstokenId + marketSlugmarketSlug identifies the Limitless market (e.g., "will-eth-flip-btc-by-end-of-2026").

Choose an order type

Market orders

Execute immediately at the best available price.
  • Market BUY — specify amount (stablecoin to spend). Fills as many shares as possible.
  • Market SELL — specify size (shares to sell). Sells at the best available price.

Limit orders

Sit on the orderbook at a specific price until someone takes the other side.
  • Limit BUY / SELL — specify size and price. Order rests until matched.

Amount vs size vs price

Order TypeRequiredRejected
Market BUYamountsize
Market SELLsizeamount
Limit BUYsize + priceamount
Limit SELLsize + priceamount
Sending the wrong field returns a 400 with a message indicating which field was expected.

Place an order

All orders go to POST /api/accounts/{accountId}/orders with venue set to polymarket, predict, opinion, or limitless. See the Place Order reference for the full schema and per-venue examples.

Polymarket

BASE = "https://trade.predexon.com"
HEADERS = {"x-api-key": "YOUR_API_KEY", "Content-Type": "application/json"}
account_id = "YOUR_ACCOUNT_ID"

order = requests.post(
    f"{BASE}/api/accounts/{account_id}/orders",
    headers=HEADERS,
    json={
        "venue": "polymarket",
        "predexonId": "polymarket:71321045679252212:Yes",
        "side": "buy",
        "type": "market",
        "amount": "10",
    },
).json()
print(f"{order['orderId']} — status: {order['status']}, filled: {order['filled']}")

Predict

order = requests.post(
    f"{BASE}/api/accounts/{account_id}/orders",
    headers=HEADERS,
    json={
        "venue": "predict",
        "market": {
            "tokenId": "103210916722172747942846166716572235061234589599991001208035034049741504775450",
            "marketId": "46954",
        },
        "side": "buy",
        "type": "market",
        "amount": "10.00",
    },
).json()

Opinion

Opinion uses marketId (whole-market) plus an outcome for specific-outcome trades.
order = requests.post(
    f"{BASE}/api/accounts/{account_id}/orders",
    headers=HEADERS,
    json={
        "venue": "opinion",
        "market": {"marketId": "123", "outcome": "Yes"},
        "side": "buy",
        "type": "limit",
        "size": "10",
        "price": "0.42",
    },
).json()

Limitless

Limitless requires both tokenId and marketSlug. Prices snap to 0.001 ticks; size supports up to 3 decimal places.
order = requests.post(
    f"{BASE}/api/accounts/{account_id}/orders",
    headers=HEADERS,
    json={
        "venue": "limitless",
        "market": {
            "tokenId": "55222001234567",
            "marketSlug": "will-eth-flip-btc-by-end-of-2026",
        },
        "side": "buy",
        "type": "limit",
        "size": "10",
        "price": "0.420",
    },
).json()

Response shape

Account-path order responses use a normalized shape:
{
  "orderId": "0xe69245af3a00e487",
  "venue": "polymarket",
  "predexonId": "polymarket:71321045679252212:Yes",
  "side": "buy",
  "outcome": "Yes",
  "status": "filled",
  "createdAt": "2026-04-15T10:30:00.000Z",
  "size": "15.38",
  "price": "0.6500",
  "filled": "15.38",
  "market": { "tokenId": "71321045679252212", "outcome": "Yes" },
  "fee": { "policyApplied": true, "feeBps": 50, "platformFeeBps": 0, "partnerFeeBps": 50 }
}
status is normalized across venues: open | filled | cancelled | expired | pending | failed.

Venue differences

PolymarketPredictOpinionLimitless
ChainPolygonBSCBSCBase
CollateralUSDC.eUSDTUSDTUSDC (native)
market requirestokenIdtokenId + marketIdmarketId (+ tokenId for specific outcomes)tokenId + marketSlug
Price tick0.010.01venue-specific0.001 (3 decimals)
Order queriesFull market bagFull market bagtokenId unavailable on reads — market contains marketId onlyFull market bag
FeesConfigurable partner feeExchange fee varies by market (automatic)Exchange fee varies by market (automatic)Server-applied (~300 bps), not configurable

After placing an order

Next Steps

Funding & Withdrawals

Deposit and withdraw funds

Fees & Monetization

Set up partner fees to monetize your app

Place Order Reference

Full endpoint reference

Get Positions Reference

Full endpoint reference