Skip to main content
POST
Place limit order

Authorizations

x-app-id
string
header
required

Your application ID. Required for all app-tier and user-tier routes.

Authorization
string
header
required

JWT access token returned by POST /auth/verify. Required for user-tier routes.

Body

application/json
venue
enum<string>
required

Venue to place the limit order on.

Available options:
kalshi,
polymarket,
limitless,
opinion,
predict,
pred,
tiprun,
probable,
myriad,
hyperliquid,
novig,
prophetx,
betdex
venueMarketOutcomeId
string
required

Outcome to trade, on that venue.

side
enum<string>
required

buy or sell.

Available options:
buy,
sell
limitPriceRaw
string
required

Limit price. Price per share scaled by 1e6, as an integer string (530000 = 0.53).

Pattern: ^[1-9][0-9]*$
sizeRaw
string
required

Order size. Shares in 6-decimal atomic units, as an integer string (1000000 = 1 share).

Pattern: ^[1-9][0-9]*$
timeInForce
enum<string>
required

GTC good till cancelled; GTD good till expiresAt; FOK fill in full now or cancel; FAK / IOC fill what you can now, cancel the rest; ALO add liquidity only (Hyperliquid's post-only). Venues support different subsets.

Available options:
GTC,
GTD,
FOK,
FAK,
IOC,
ALO
postOnly
boolean

Only rest on the book; reject instead of taking liquidity.

expiresAt
string<date-time>

Expiry time, for GTD orders.

clientOrderId
string

Your own id for the order, returned on GET /execution/orders.

Required string length: 1 - 128
approveMode
enum<string>

Self-custody, cross-chain fills only: how the token approval a bridge needs is made. sponsored (default): the wallet does not send the approve itself; it signs a one-time EIP-7702 authorization per chain, over a raw digest (not EIP-191 or EIP-712), which many wallets cannot produce. user_broadcast: the user sends the approve transaction from their wallet and pays its gas, on every bridge. Pick based on what the wallet software supports. Neither mode makes bridging free: quote with deepEstimate and read feeBreakdown.bridgeFees and feeBreakdown.setupCosts.

Available options:
sponsored,
user_broadcast
fundingAddresses
string[]

Self-custody: other linked wallets this fill may spend from (signingAddress is always included). Order does not matter: per token, the wallet with the largest balance is used first. Omit to fund from the signing wallet only.

Required string length: 42
signingAddress
string

Linked account EOA for self-custody; omit for managed custody. Polymarket supports GTC/GTD buys and sells, at or above the market's minimum size, and requires a previously set-up deposit wallet, which makes every order; a legacy Polymarket Safe can top up a buy's pUSD or a sell's shares by moving them into that deposit wallet first (one extra Safe signature), and legacy proxy wallets are not supported. Hyperliquid supports GTC/ALO buys and sells, whole contracts and a 0.00001 price tick, without expiresAt. Hyperliquid order actions are signed by the EOA or its approved client-held agg agent; AGG never holds an agent key. Placement returns quoteId: poll execution status and answer pendingSignatures using each request's signerAddress. Placement is pending until signatures and venue submission finish. Self-custody buys do not reserve managed balances. Funding uses supported balances across chains and the pinned deposit wallet. On a buy, fundingAddresses may add other wallets linked to the same account; their balances fund the order only by bridging in, never on the venue's own chain. Polymarket CLOB credentials are derived in memory per order or signed cancel and never stored; cancelling requires a fresh cancelSignature. Hyperliquid cancellation requires a fresh signed cancel action. An account referenced by an order cannot be disconnected, including after that order becomes terminal.

Required string length: 42

Response

200

orderId
string
required

Order id.

status
enum<string>
required

Order lifecycle status. In flight: pending (accepted, funds being checked), signing, pending_bridge (funds moving to the venue's chain), submitting, submitted (sent to the venue, awaiting confirmation). Resting limit orders: open, partially_filled_open, cancel_pending (cancel requested, awaiting the venue). Terminal: filled, partial_fill (the unfilled rest will not fill; see partialFillReason), failed, expired, cancelled.

Available options:
pending,
signing,
pending_bridge,
submitting,
submitted,
open,
partially_filled_open,
cancel_pending,
filled,
partial_fill,
failed,
expired,
cancelled
venue
enum<string>
required

Venue the order was placed on.

Available options:
kalshi,
polymarket,
limitless,
opinion,
predict,
pred,
tiprun,
probable,
myriad,
hyperliquid,
novig,
prophetx,
betdex
limitPriceRaw
string
required

Limit price. Price per share scaled by 1e6, as an integer string (530000 = 0.53).

limitSizeRaw
string
required

Order size. Shares in 6-decimal atomic units, as an integer string (1000000 = 1 share).

filledSizeRaw
string
required

Shares filled so far. Shares in 6-decimal atomic units, as an integer string (1000000 = 1 share).

remainingSizeRaw
string
required

Shares not yet filled. Shares in 6-decimal atomic units, as an integer string (1000000 = 1 share).

quoteId
string

Execution quote ID for polling GET /execution/status and submitting the user's signatures to POST /execution/fill/:quoteId/signatures. Present for funded buy orders.

venueOrderId
string | null

The venue's own order id, once known.

reservedCostRaw
string | null

Cash held for a managed buy. null for sells and self-custody. USD in 6-decimal atomic units, as an integer string (1000000 = $1.00).