Place Order
Place a buy or sell order on an enabled venue.
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.marketbag - venue-specific fields. Required fields differ per venue (see below).
predexonId wins.
Required market fields by venue
| Venue | Required fields | Notes |
|---|---|---|
| Polymarket | tokenId | Each outcome (Yes/No) has its own token ID. |
| Predict | tokenId + marketId | Both required - marketId is the numeric Predict market ID. |
| Opinion | tokenId + marketId | Both required - tokenId identifies the outcome side, marketId is the numeric Opinion market ID. |
| Limitless | tokenId + marketSlug | marketSlug 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. |
| Hyperliquid | assetId | Identifies a specific HIP-4 outcome side. |
Order type requirements
| Order type | Required | Rejected |
|---|---|---|
| Market BUY | amount | size |
| Market SELL | size | amount |
| Limit BUY / SELL | size, price | amount |
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.| Field | Applies to | Meaning |
|---|---|---|
priceBoundary | Market orders | Worst-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. |
timeInForce | Market orders | fak 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. |
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
| Venue | Price tick | Size precision | Min order |
|---|---|---|---|
| Polymarket | Per-market (typically 0.01; some markets use 0.001) | unconstrained | Per Polymarket’s CLOB (typically $1) |
| Predict | Per-market (typically 0.01) | unconstrained | Per Predict’s CLOB (typically $1) |
| Opinion | market-specific | market-specific | market-specific |
| Limitless | 3 decimals (0.001) | max 3 decimal places | market-specific |
| Hyperliquid | up to 5 significant digits | unconstrained | $10 notional (size × price) |
price must be strictly between 0 and 1 (exclusive) on every venue.
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 canonicalpredexonId 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.
POST /transfers - use the per-venue Withdraw endpoint directly. See Funding & Withdrawals for details.Authorizations
Path Parameters
Body
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.
polymarket, predict, opinion, limitless, hyperliquid buy, sell limit, market Canonical per-outcome identifier (px- + 12 base32 chars). When supplied, the venue-specific fields (tokenId, marketId, marketSlug, assetId) are resolved server-side.
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).
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.
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 per share, between 0 and 1 (exclusive). Required for limit orders.
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.
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.
gtc, ioc, fok, fak Response
Order placed
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).
buy, sell Order type. Populated on placement responses (echoed from the request); null on list and detail responses.
market, limit Normalized order status across venues. partial means the order matched some shares but the rest is still open or terminal-cancelled.
open, filled, partial, cancelled, expired, pending, failed Number of shares (when size was provided in request)
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.
Number of shares actually filled (may be less than requested size on a partial fill). Emits null (not absent) when no fills.
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 metadata (when fees are active)
