Skip to main content

New Order

Type: TRADE · Weight: 1 · counted against the order buckets

Status: Implemented.

POST /api/v3/order

Place a LIMIT (good-till-cancelled) or MARKET (immediate-or-cancel) spot order. The response is an acknowledgement, not a fill report: executedQty is always 0 even when the order fills immediately. Read fills from myTrades and final state from allOrders.

Request — all parameters in the query string, signature last, empty body (see Request conventions)

POST /api/v3/order?symbol=CBTC-USDCB&side=BUY&type=LIMIT&quantity=0.001&price=50000&timestamp=1756600000000&signature=...

Parameters

NameTypeRequiredNotes
symbolstringyese.g. CBTC-USDCB.
sidestringyesBUY or SELL.
typestringyesLIMIT or MARKET.
quantitystringyesBase-asset quantity, a positive decimal. stepSize / minQty are not validated at order entry; round client-side.
pricestringLIMIT onlyLimit price, a positive decimal (tickSize is not validated at order entry). Must be absent for MARKET (-1100 otherwise).
newClientOrderIdstringnoIdempotency key; a random UUID is generated if omitted. Echoed as clientOrderId. A repeat with the same value within 15 minutes returns the original orderId instead of placing a new order.
timestamp, recvWindow, signatureSee Authentication.

timeInForce, quoteOrderQty, icebergQty, stopPrice, newOrderRespType, selfTradePreventionMode are ignored.

Execution semantics

  • LIMIT rests as GTC. Spot is always 1x: a BUY locks price × quantity of the quote asset, a SELL locks quantity of the base asset, at order entry.
  • MARKET is IOC with a 5 % protective band: a BUY may take asks up to bestAsk × 1.05, a SELL may hit bids down to bestBid × 0.95; the unfilled remainder is cancelled. The band price is also the amount locked for a BUY. An empty opposite side is rejected with -2010 Market order rejected: no counterparty liquidity.
  • Self-trade prevention is always on: the matcher skips your own resting orders and continues to the next counterparty; the resting order is neither filled nor cancelled.
  • Wallet-funded accounts (see On-chain Settlement): price × quantity (for MARKET, band price × quantity) must be at least the symbol's minNotional (-1013); the account must have completed MemberAuth (-2012) and must not be frozen (-2010). These gates run before anything else is validated.

Response — 200 (values illustrative)

{
"symbol": "CBTC-USDCB",
"orderId": "019910a4-9f21-7b34-8c56-1d2e3f4a5b6c",
"orderListId": -1,
"clientOrderId": "mm-quote-1756600000-17",
"transactTime": 1756600000123,
"price": "50000",
"origQty": "0.001",
"executedQty": "0.00000000",
"cummulativeQuoteQty": "0.00000000",
"status": "NEW",
"timeInForce": "GTC",
"type": "LIMIT",
"side": "BUY"
}
FieldNotes
orderIdUUID string. Use it for GET / DELETE /api/v3/order.
orderListIdAlways -1 (no OCO).
clientOrderIdYour newClientOrderId, or the generated UUID. Not stored for later lookup — see Query Order.
priceEcho of price for LIMIT; "0" for MARKET in this acknowledgement (GET /api/v3/order and allOrders report the band price as price).
origQtyEcho of quantity, unnormalized.
executedQty, cummulativeQuoteQtyAlways "0.00000000" in this acknowledgement.
statusAlways "NEW".
timeInForce"GTC" for LIMIT, "IOC" for MARKET.

Errors

HTTPcodemsg / cause
400-1100Bad side or type; price sent with MARKET; the trading service rejected a parameter (unknown symbol, non-numeric or non-positive price / quantity).
400-1102symbol, quantity, or (LIMIT) price missing or empty.
400-1013Filter failure: NOTIONAL — below minNotional (wallet-funded accounts).
422-2010Insufficient balance to lock (same msg when the market is inactive or order entry is paused by the risk gate); or MARKET with no liquidity; or account frozen. Distinguish by msg.
422-2012Wallet enrollment (MemberAuth) required.
429-1003Weight or order-count bucket exhausted.
500-1000Trading service unavailable.

Authentication errors (-1021, -1022, -2014, -2015) as in Error codes.

Differences from Binance

  • Only LIMIT/GTC and MARKET/IOC. No LIMIT_MAKER, stop orders, quoteOrderQty, or newOrderRespType=FULL (the response never carries fills).
  • orderId is a UUID string; clientOrderId is not queryable.
  • Parameters must be in the query string.