Skip to main content

Place Order

Place a new futures order.

HTTP

MethodPOST
Endpoint/trade/api/v2/futures/order
Rate limit20 requests per 60 seconds

Request Parameters

ParameterTypeMandatoryDescription
exchangestringYesEXCHANGE_2. See Exchange Identifiers.
symbolstringYesConcatenated BASEUSDT, e.g. BTCUSDT, DOGEUSDT. Quote is always USDT.
sidestringYesBUY or SELL (case-insensitive).
order_typestringYesMARKET, LIMIT, TAKE_PROFIT_MARKET, or STOP_MARKET.
pricenumberConditionalLimit price. Mandatory for LIMIT; ignored for the others.
quantitynumberYesBase-asset quantity. Send 0 for TAKE_PROFIT_MARKET and STOP_MARKET (these apply to the full position).
trigger_pricenumberConditionalTrigger price for TAKE_PROFIT_MARKET / STOP_MARKET.
reduce_onlybooleanConditionalMandatory true for TAKE_PROFIT_MARKET / STOP_MARKET. Optional for limit orders — true ensures the order will only reduce the existing position, never open the opposite side.
time_in_forcestringNoGTC (default), IOC, or FOK.
client_order_idstringNoOptional client-supplied UUID echoed back in order responses.

TP/SL orders (TAKE_PROFIT_MARKET / STOP_MARKET)

These set position-level take-profit / stop-loss. They apply to the whole open position on the symbol, not a specific quantity. The pattern is:

  • quantity = 0
  • trigger_price = the price at which to trigger the close
  • reduce_only = true
# Set a stop-loss at 0.30 USDT on a long DOGEUSDT position
body = {
"exchange": "EXCHANGE_2",
"symbol": "dogeusdt",
"side": "SELL",
"order_type": "STOP_MARKET",
"quantity": 0,
"trigger_price": 0.30,
"reduce_only": True,
}

Example

import requests

body = {
"symbol": "dogeusdt",
"exchange": "EXCHANGE_2",
"side": "BUY",
"order_type": "LIMIT",
"price": 0.28,
"quantity": 22,
}
headers, path = sign_request("POST", "/trade/api/v2/futures/order")
response = requests.post(BASE_URL + path, headers=headers, json=body)
print(response.json())

Response

{
"data": {
"order_id": "01936474-a76f-767e-a056-ca1d41915778",
"exchange": "EXCHANGE_2",
"symbol": "DOGEUSDT",
"side": "BUY",
"status": "RAISED",
"order_type": "LIMIT",
"quantity": "22",
"exec_quantity": "0",
"price": "0.28",
"avg_execution_price": "0",
"execution_fee": "0.0041",
"realised_pnl": "0",
"reduce_only": false,
"trigger_price": "0",
"created_at": 1732557186934,
"updated_at": 1732557186934
}
}

If status is RAISED, poll Get Order Status until you see a terminal status. See Order Lifecycle.

Futures PARTIALLY_EXECUTED is terminal

Unlike Spot, in Futures PARTIALLY_EXECUTED is a terminal status — the unfilled remainder of the order is no longer working and won't fill further. If you need the full quantity filled, place a new order for the remaining size.

Response Parameters

FieldTypeDescription
order_idstringCoinSwitch order ID (UUID).
exchangestringExchange identifier echoed back.
symbolstringSymbol echoed back, uppercase.
sidestringBUY or SELL.
statusstringOne of the Order Lifecycle values.
order_typestringEchoed back.
quantitystringOriginal quantity (decimal string).
exec_quantitystringFilled quantity so far.
pricestringLimit price for LIMIT orders; "0" for market orders.
avg_execution_pricestringAverage fill price. "0" until any fill.
execution_feestringTotal fee charged so far (USDT).
realised_pnlstringRealised P&L (USDT).
reduce_onlybooleanEchoed back.
trigger_pricestringTrigger price for TAKE_PROFIT_MARKET / STOP_MARKET. "0" otherwise.
created_atintegerOrder creation time (Unix milliseconds).
updated_atintegerLast update time (Unix milliseconds).

Errors

HTTPCause
400Invalid quantity, price below tick, or insufficient available balance.
401Invalid signature. See Authentication.
422Validation failed on parameter types or missing required fields.