Skip to main content

New Order

Type: TRADE

POST /fapi/v1/order

Place a new order. Currently only LIMIT is supported; MARKET returns -1100 until the matching engine grows a MARKET type.

Request

POST /fapi/v1/order

Query params

All parameters (including timestamp, recvWindow, signature) are read from the URL query string. A request body is only concatenated into the signed payload; parameters sent in the body alone are not read by the handler, so a required parameter missing from the query string fails with HTTP 400 (plain-text axum rejection, not a {code, msg} JSON body).

NameTypeRequiredNotes
symbolstringyesstandard pair, e.g. BTCUSDT.
sidestringyesBUY or SELL.
typestringyesOnly LIMIT accepted today.
quantitystringyesBase-asset quantity. Must parse as a positive decimal (-1100 otherwise).
pricestringyes for LIMITLimit price. Must parse as a positive decimal (-1100 otherwise).
newClientOrderIdstringnoFree-form idempotency key. Auto-generated UUID if omitted. Re-sending the same value within 15 minutes returns the original orderId without placing a new order. It is not persisted: GET /fapi/v1/order and GET /fapi/v1/openOrders report clientOrderId equal to orderId.

Response — 200

{
"orderId": "8a3f5b2c-4d1e-6f7a-8b9c-0d1e2f3a4b5c",
"clientOrderId": "my-bot-1748275200-001",
"symbol": "BTCUSDT",
"status": "NEW",
"side": "BUY",
"type": "LIMIT",
"price": "76500.00",
"origQty": "0.001",
"updateTime": 1748275200500
}

status is always NEW in this response (the order is acknowledged before matching; an order that fills immediately is still reported as NEW). price and origQty echo the request strings verbatim; updateTime is the server time at response.

Errors

HTTPcodemsg
400-1100Unknown symbol, invalid side, unsupported type (e.g. MARKET), or price / quantity not a positive decimal.
400-1102price missing on a LIMIT order.
422-2010Insufficient balance to lock the required margin. Also returned when the market is inactive or trading is paused by the insurance-fund risk gate (BlockAllOpen / ForceDeleverage, or BlockHighLeverage with leverage > 5) — orders that only reduce an existing position still pass the gate.
401-2015Invalid or revoked API key.
500-1000Downstream (trading-api / ledger) failure.

Signature and API-key failures (-1021, -1022, -1102, -2014, -2015) and rate limiting (-1003, HTTP 429) apply to every signed endpoint; see Error Codes.

Other standard params not yet supported: timeInForce, reduceOnly, closePosition, stopPrice, activationPrice, callbackRate, workingType, priceProtect, newOrderRespType, positionSide. They are silently ignored if sent (not rejected); every order behaves as GTC, one-way (BOTH), non-reduce-only.

Leverage: this order uses whatever leverage you last set for symbol via POST /fapi/v1/leverage (1–100x; defaults to 10x if you've never called it). It is not a per-order parameter on this endpoint — matches real Binance Futures, where leverage is a standing per-symbol setting, not inline on each order.