Skip to main content
POST
/
api
/
accounts
/
{accountId}
/
orders
curl --request POST \
  --url https://trade.predexon.com/api/accounts/{accountId}/orders \
  --header 'Content-Type: application/json' \
  --header 'x-api-key: <api-key>' \
  --data '
{
  "venue": "polymarket",
  "market": {
    "tokenId": "71321045679252212"
  },
  "side": "buy",
  "type": "market",
  "amount": "2"
}
'
{
  "orderId": "0xe69245af3a00e487",
  "venue": "polymarket",
  "side": "buy",
  "outcome": "Yes",
  "status": "filled",
  "createdAt": "2026-04-15T10:30:00.000Z",
  "size": "3.7547",
  "price": "0.53",
  "filled": "3.7547",
  "market": {
    "tokenId": "71321045679252212",
    "outcome": "Yes"
  },
  "fee": {
    "policyApplied": true,
    "feeBps": 50,
    "platformFeeBps": 0,
    "partnerFeeBps": 50,
    "grossAmount": "2",
    "netOrderAmount": "1.99",
    "maxFeeReserved": "0.01"
  }
}
venue is always required in the body. Identify the market within that venue in one of two ways:
  • predexonId (recommended) - Predexon’s canonical per-outcome identifier (px- + 12 base32 chars). The server resolves the venue-specific fields for you.
  • market bag - venue-specific fields. Required fields differ per venue (see below).
If both are supplied, predexonId wins.

Required market fields by venue

VenueRequired fieldsNotes
PolymarkettokenIdEach outcome (Yes/No) has its own token ID.
PredicttokenId + marketIdBoth required - marketId is the numeric Predict market ID.
OpiniontokenId + marketIdBoth required - tokenId identifies the outcome side, marketId is the numeric Opinion market ID.
LimitlesstokenId + marketSlugmarketSlug identifies the Limitless market (e.g., "btc-up-or-down-1-hour-1778011201918" - real slugs include a unix-millis suffix that disambiguates recurring markets). Both required.
HyperliquidassetIdIdentifies a specific HIP-4 outcome side.

Order type requirements

Order typeRequiredRejected
Market BUYamountsize
Market SELLsizeamount
Limit BUY / SELLsize, priceamount
On Hyperliquid, market BUY also takes size (the share count to acquire) instead of amount. The order fills at the best available ask up to that quantity.

Slippage controls (Polymarket market orders)

Two optional fields give Polymarket market orders price control. Both are additive — omit them and a market order behaves exactly as before (fills at the marketable price, fill-and-kill). Other venues ignore them.
FieldApplies toMeaning
priceBoundaryMarket ordersWorst-acceptable price. BUY = ceiling (won’t pay above it), SELL = floor (won’t sell below it). Strictly between 0 and 1. Rejected on limit orders — use price there.
timeInForceMarket ordersfak or ioc = fill-and-kill (partial fill OK, remainder cancelled — the default). fok = fill-or-kill (the full size fills or nothing does). Limit orders are always GTC.
{
  "venue": "polymarket",
  "predexonId": "px-abcdef012345",
  "side": "buy",
  "type": "market",
  "amount": "100",
  "priceBoundary": "0.55",
  "timeInForce": "fok"
}
No fill is a clean outcome, not an error you should swallow. On a SELL, if the best available price is below your priceBoundary floor, the order does not fill and returns 422 with error: "price_boundary_unmet" and the best available price in the message — that’s “the market isn’t at your floor yet,” distinct from “no liquidity.” Lower priceBoundary, or wait for the book to come to you, then retry.

Venue-specific constraints

VenuePrice tickSize precisionMin order
PolymarketPer-market (typically 0.01; some markets use 0.001)unconstrainedPer Polymarket’s CLOB (typically $1)
PredictPer-market (typically 0.01)unconstrainedPer Predict’s CLOB (typically $1)
Opinionmarket-specificmarket-specificmarket-specific
Limitless3 decimals (0.001)max 3 decimal placesmarket-specific
Hyperliquidup to 5 significant digitsunconstrained$10 notional (size × price)
price must be strictly between 0 and 1 (exclusive) on every venue.
**Hyperliquid 10minimum:everyorderbuyorsell,limitormarketmusthaveanotionalvalueofatleast10 minimum:** every order - buy or sell, limit or market - must have a notional value of at least 10 USDC (size × price ≥ 10). Smaller orders are rejected. To close a small position, submit a sell with a size larger than your holdings - the venue will fill what you actually have and reject any over-fill.

Response

Order responses include the canonical predexonId for the outcome you traded - handy for cross-referencing with Positions, Router Quote, and the Data API. Measuring slippage: price is the realized average fill price (not what you requested), and filled is the share count actually matched. Slippage is price vs. your priceBoundary (or the mid you expected at submit); a partial fill shows as filled < requested size.
Hyperliquid positions can’t be drained via POST /transfers - use the per-venue Withdraw endpoint directly. See Funding & Withdrawals for details.

Authorizations

x-api-key
string
header
required

Path Parameters

accountId
string
required

Body

application/json

Identify the market with either a canonical predexonId (recommended) or a venue-specific market bag. When both are supplied, predexonId wins. Provide one or the other. Hyperliquid orders must meet a $10 minimum notional (size * price >= 10), enforced by the venue; smaller orders are rejected.

venue
enum<string>
required
Available options:
polymarket,
predict,
opinion,
limitless,
hyperliquid
side
enum<string>
required
Available options:
buy,
sell
type
enum<string>
required
Available options:
limit,
market
predexonId
string

Canonical per-outcome identifier (px- + 12 base32 chars). When supplied, the venue-specific fields (tokenId, marketId, marketSlug, assetId) are resolved server-side.

market
object

Venue-specific market identification. Populate the fields the target venue requires: Polymarket needs tokenId; Predict, Opinion, and Limitless need tokenId and one other field (marketId for Predict and Opinion; marketSlug for Limitless); Hyperliquid needs assetId. On responses, the bag contains only the fields the venue surfaces (tokenId, marketId, ticker, outcome, assetId) — request-only fields like marketSlug are not echoed back, and Opinion order-list responses contain marketId only (placement responses include both).

amount
string

Stablecoin to spend — pUSD (Polymarket), USDT (Predict / Opinion), USDC (Limitless). Market BUY only. Not accepted on Hyperliquid, which is size-only; use size for Hyperliquid market buys.

size
string

Number of shares. Required for market SELL and all limit orders. Also required for Hyperliquid market BUY: Hyperliquid is size-only (no notional/amount order type), so a market buy fills at the best ask up to this share quantity.

price
string

Price per share, between 0 and 1 (exclusive). Required for limit orders.

priceBoundary
string

Polymarket only, market orders only. Worst-acceptable price (slippage cap): BUY = ceiling (won't pay above it), SELL = floor (won't sell below it). Strictly between 0 and 1. Omit to fill at the marketable price. Rejected on limit orders — use price there. On a SELL where the best available price is below the floor, the order does not fill and returns 422 price_boundary_unmet.

timeInForce
enum<string>

Polymarket market orders: fak/ioc = fill-and-kill (partial OK, remainder cancelled — default), fok = fill-or-kill (all-or-nothing). Polymarket limit orders are always GTC. Kalshi limit orders accept gtc/ioc/fok. Ignored by other venues.

Available options:
gtc,
ioc,
fok,
fak

Response

Order placed

orderId
string
venue
string
predexonId
string | null

Canonical per-outcome identifier. Echoed back when the request used predexonId; otherwise computed deterministically from (venue, tokenId) and returned. null only when the underlying venue identifier can't be normalized (rare).

side
enum<string>
Available options:
buy,
sell
type
enum<string> | null

Order type. Populated on placement responses (echoed from the request); null on list and detail responses.

Available options:
market,
limit
outcome
string
status
enum<string>

Normalized order status across venues. partial means the order matched some shares but the rest is still open or terminal-cancelled.

Available options:
open,
filled,
partial,
cancelled,
expired,
pending,
failed
createdAt
string
size
string

Number of shares (when size was provided in request)

price
string | null

Realized average fill price (NOT the requested price) for market orders and immediately-filled limit orders — derived from the actual matched amounts. For still-open limit orders it's the resting limit price. null when nothing filled. Compare against your priceBoundary (or expected mid) to measure slippage.

filled
string | null

Number of shares actually filled (may be less than requested size on a partial fill). Emits null (not absent) when no fills.

market
object

Venue-specific market identification. Populate the fields the target venue requires: Polymarket needs tokenId; Predict, Opinion, and Limitless need tokenId and one other field (marketId for Predict and Opinion; marketSlug for Limitless); Hyperliquid needs assetId. On responses, the bag contains only the fields the venue surfaces (tokenId, marketId, ticker, outcome, assetId) — request-only fields like marketSlug are not echoed back, and Opinion order-list responses contain marketId only (placement responses include both).

fee
object

Fee metadata (when fees are active)

message
string