Skip to main content
POST /v1/accounts/{accountId}/orders
Place a buy or sell order. The user does not specify a venue — Predexon routes. Request
{
  "predexonId": "px-abc123def456",
  "side": "buy",
  "type": "market",
  "amount": 50.00
}
FieldTypeDescription
predexonIdstringCanonical outcome identifier from the Data API. Each outcome (Yes / No) has its own predexonId — there is no separate outcome field on the request.
side"buy" | "sell"
type"limit" | "market"
sizenumberNumber of shares.
amountnumberUSDC notional.
pricenumberLimit price, strictly between 0 and 1 (exclusive).
size, amount, and price are conditionally required by order type:
Order typeRequiredRejected
Limit BUY / SELLsize, priceamount
Market BUYamountsize, price
Market SELLsizeamount, price
Response 201 Created Market orders fill atomically — the response shows the executed fill. For a limit order that doesn’t fill immediately, status is "open", filled is "0", averagePrice is null, and metadata.fills is empty until fills arrive. Use Get Order or List Trades to inspect post-placement state.
{
  "orderId": "ord_3e2b...",
  "predexonId": "px-abc123def456",
  "title": "Will Trump win the 2028 election?",
  "outcome": "Yes",
  "side": "buy",
  "type": "market",
  "status": "filled",
  "filled": "100",
  "averagePrice": "0.495",
  "amount": "50.00",
  "notional": "49.50",
  "fee": "0.50",
  "createdAt": "2026-05-06T12:00:00.214Z",
  "filledAt": "2026-05-06T12:00:00.832Z",
  "metadata": {
    "fills": [
      { "source": "venue", "venue": "polymarket", "size": "50", "fillPrice": "0.50", "fee": "0.25" },
      { "source": "venue", "venue": "limitless", "size": "50", "fillPrice": "0.49", "fee": "0.25" }
    ]
  }
}
The top-level fields (status, filled, averagePrice, notional, fee) are the aggregated source of truth. metadata.fills shows the per-source breakdown so users can verify routing and reconcile against on-chain activity. Math: 50 × $0.50 + 50 × $0.49 = $49.50 notional + $0.50 fees = $50 = amount; avg $0.495. Trading fees on venue fills are venue-passthrough: top-level fee is the sum of metadata.fills[].fee. RFQ fills carry no explicit fee (the market maker’s compensation is baked into the quoted fillPrice). A fill from a market maker looks like this — source: "rfq" with a marketMaker identifier instead of venue:
{ "source": "rfq", "marketMaker": "mm-acme", "size": "50", "fillPrice": "0.495", "fee": "0" }
See Liquidity sources for how the router decides between venue order books and RFQ market makers. There is no modify endpoint — to change a price or size on an open limit order, cancel it and place a new one.

Status values

StatusMeaning
openLimit order accepted, awaiting fills (or partially filled).
filledFully filled.
cancelledCancelled before fully filling. The filled portion (if any) remains as a position.
expiredLimit order reached its time-in-force expiry without fully filling.
pendingTransitional — order is being submitted to venues but not yet acknowledged.
failedSubmission rejected after acceptance (e.g., no venue had usable liquidity, treasury error).