Trading endpoints
New order (TRADE)
POST /api/v3/order
Send in a new order.
This adds 1 order to the EXCHANGE_MAX_ORDERS filter and the MAX_NUM_ORDERS filter.
Weight: 1
Unfilled Order Count: 1
Parameters:
| Name | Type | Mandatory | Description |
|---|---|---|---|
| symbol | STRING | YES | |
| side | ENUM | YES | Please see Enums for supported values. |
| type | ENUM | YES | Please see Enums for supported values. |
| timeInForce | ENUM | NO | Please see Enums for supported values. |
| quantity | DECIMAL | NO | |
| quoteOrderQty | DECIMAL | NO | |
| price | DECIMAL | NO | |
| newClientOrderId | STRING | NO | A unique id among open orders. Automatically generated if not sent. Orders with the same newClientOrderID can be accepted only when the previous one is filled, otherwise the order will be rejected. |
| strategyId | LONG | NO | |
| strategyType | INT | NO | The value cannot be less than 1000000. |
| stopPrice | DECIMAL | NO | Used with STOP_LOSS, STOP_LOSS_LIMIT, TAKE_PROFIT, and TAKE_PROFIT_LIMIT orders. |
| trailingDelta | LONG | NO | See Trailing Stop order FAQ |
| icebergQty | DECIMAL | NO | Used with LIMIT, STOP_LOSS_LIMIT, and TAKE_PROFIT_LIMIT to create an iceberg order. |
| newOrderRespType | ENUM | NO | MARKET and LIMIT order types default to FULL, all other orders default to ACK. |
| selfTradePreventionMode | ENUM | NO | The allowed enums is dependent on what is configured on the symbol. |
| pegPriceType | ENUM | NO | See Pegged Orders Info |
| pegOffsetValue | INT | NO | Maximum: 100. Price level to peg the price to (max: 100). See Pegged Orders Info |
| pegOffsetType | ENUM | NO | Only PRICE_LEVEL is supported. See Pegged Orders Info |
| recvWindow | DECIMAL | NO | Maximum: 60000. Supports up to three decimal places of precision (e.g., 6000.346) so that microseconds may be specified. |
| timestamp | LONG | YES | Unix timestamp used to sign the request, in milliseconds or microseconds. The value must reflect the current client time and is validated by the server for signed endpoints. |
Data Source: Matching Engine
Some additional mandatory parameters based on order type:
| Type | Additional mandatory parameters | Additional Information |
|---|---|---|
LIMIT | timeInForce, quantity, price | |
MARKET | quantity or quoteOrderQty | MARKET orders using the quantity field specifies the amount of the base asset the user wants to buy or sell at the market price. E.g. MARKET order on BTCUSDT will specify how much BTC the user is buying or selling. MARKET orders using quoteOrderQty specifies the amount the user wants to spend (when buying) or receive (when selling) the quote asset; the correct quantity will be determined based on the market liquidity and quoteOrderQty. E.g. Using the symbol BTCUSDT: BUY side, the order will buy as many BTC as quoteOrderQty USDT can. SELL side, the order will sell as much BTC needed to receive quoteOrderQty USDT. |
STOP_LOSS | quantity, stopPrice or trailingDelta | This will execute a MARKET order when the conditions are met. (e.g. stopPrice is met or trailingDelta is activated) |
STOP_LOSS_LIMIT | timeInForce, quantity, price, stopPrice or trailingDelta | |
TAKE_PROFIT | quantity, stopPrice or trailingDelta | This will execute a MARKET order when the conditions are met. (e.g. stopPrice is met or trailingDelta is activated) |
TAKE_PROFIT_LIMIT | timeInForce, quantity, price, stopPrice or trailingDelta | |
LIMIT_MAKER | quantity, price | This is a LIMIT order that will be rejected if the order immediately matches and trades as a taker. This is also known as a POST-ONLY order. |
Notes on using parameters for Pegged Orders:
- These parameters are allowed for
LIMIT,LIMIT_MAKER,STOP_LOSS_LIMIT,TAKE_PROFIT_LIMITorders. - If
pegPriceTypeis specified,pricebecomes optional. Otherwise, it is still mandatory. pegPriceType=PRIMARY_PEGmeans the primary peg, that is the best price on the same side of the order book as your order.pegPriceType=MARKET_PEGmeans the market peg, that is the best price on the opposite side of the order book from your order.- Use
pegOffsetTypeandpegOffsetValueto request a price level other than the best one. These parameters must be specified together.
Other info:
- Any
LIMITorLIMIT_MAKERtype order can be made an iceberg order by sending anicebergQty. - Any order with an
icebergQtyMUST havetimeInForceset toGTC. - For
STOP_LOSS,STOP_LOSS_LIMIT,TAKE_PROFIT_LIMITandTAKE_PROFITorders,trailingDeltacan be combined withstopPrice. MARKETorders usingquoteOrderQtywill not breakLOT_SIZEfilter rules; the order will execute aquantitythat will have the notional value as close as possible toquoteOrderQty. Trigger order price rules against market price for both MARKET and LIMIT versions:- Price above market price:
STOP_LOSSBUY,TAKE_PROFITSELL - Price below market price:
STOP_LOSSSELL,TAKE_PROFITBUY
- Price above market price:
Response:
ACK response type:
{
"symbol": "BTCUSDT",
"orderId": 28,
"orderListId": -1, // Unless it's part of an order list, value will be -1
"clientOrderId": "6gCrw2kRUAF9CvJDGP16IP",
"transactTime": 1507725176595
}
RESULT response type:
{
"symbol": "BTCUSDT",
"orderId": 28,
"orderListId": -1, // Unless it's part of an order list, value will be -1
"clientOrderId": "6gCrw2kRUAF9CvJDGP16IP",
"transactTime": 1507725176595,
"price": "0.00000000",
"origQty": "10.00000000",
"executedQty": "10.00000000",
"origQuoteOrderQty": "0.000000",
"cummulativeQuoteQty": "10.00000000",
"status": "FILLED",
"timeInForce": "GTC",
"type": "MARKET",
"side": "SELL",
"workingTime": 1507725176595,
"selfTradePreventionMode": "NONE"
}
FULL response type:
{
"symbol": "BTCUSDT",
"orderId": 28,
"orderListId": -1, // Unless it's part of an order list, value will be -1
"clientOrderId": "6gCrw2kRUAF9CvJDGP16IP",
"transactTime": 1507725176595,
"price": "1.00000000",
"origQty": "10.00000000",
"executedQty": "10.00000000",
"origQuoteOrderQty": "0.000000",
"cummulativeQuoteQty": "10.00000000",
"status": "FILLED",
"timeInForce": "GTC",
"type": "MARKET",
"side": "SELL",
"workingTime": 1507725176595,
"selfTradePreventionMode": "NONE",
"fills": [
{
"price": "4000.00000000",
"qty": "1.00000000",
"commission": "4.00000000",
"commissionAsset": "USDT",
"tradeId": 56
},
{
"price": "3999.00000000",
"qty": "5.00000000",
"commission": "19.99500000",
"commissionAsset": "USDT",
"tradeId": 57
},
{
"price": "3998.00000000",
"qty": "2.00000000",
"commission": "7.99600000",
"commissionAsset": "USDT",
"tradeId": 58
},
{
"price": "3997.00000000",
"qty": "1.00000000",
"commission": "3.99700000",
"commissionAsset": "USDT",
"tradeId": 59
},
{
"price": "3995.00000000",
"qty": "1.00000000",
"commission": "3.99500000",
"commissionAsset": "USDT",
"tradeId": 60
}
]
}
Test new order (TRADE)
POST /api/v3/order/test
Test new order creation and signature/recvWindow long.
Creates and validates a new order but does not send it into the matching engine.
Weight:
| Condition | Weight |
|---|---|
Without computeCommissionRates | 1 |
With computeCommissionRates | 20 |
Parameters:
| Name | Type | Mandatory | Description |
|---|---|---|---|
| computeCommissionRates | BOOLEAN | NO | Default: false See Commissions FAQ to learn more. |
| symbol | STRING | YES | |
| side | ENUM | YES | Please see Enums for supported values. |
| type | ENUM | YES | Please see Enums for supported values. |
| timeInForce | ENUM | NO | Please see Enums for supported values. |
| quantity | DECIMAL | NO | |
| quoteOrderQty | DECIMAL | NO | |
| price | DECIMAL | NO | |
| newClientOrderId | STRING | NO | A unique id among open orders. Automatically generated if not sent. Orders with the same newClientOrderID can be accepted only when the previous one is filled, otherwise the order will be rejected. |
| strategyId | LONG | NO | |
| strategyType | INT | NO | The value cannot be less than 1000000. |
| stopPrice | DECIMAL | NO | Used with STOP_LOSS, STOP_LOSS_LIMIT, TAKE_PROFIT, and TAKE_PROFIT_LIMIT orders. |
| trailingDelta | LONG | NO | See Trailing Stop order FAQ |
| icebergQty | DECIMAL | NO | Used with LIMIT, STOP_LOSS_LIMIT, and TAKE_PROFIT_LIMIT to create an iceberg order. |
| newOrderRespType | ENUM | NO | Set the response JSON. ACK, RESULT, or FULL; MARKET and LIMIT order types default to FULL, all other orders default to ACK. |
| selfTradePreventionMode | ENUM | NO | The allowed enums is dependent on what is configured on the symbol. Supported values: STP Modes |
| pegPriceType | ENUM | NO | PRIMARY_PEG or MARKET_PEG. See Pegged Orders |
| pegOffsetValue | INT | NO | Price level for pegging (max: 100). See Pegged Orders |
| pegOffsetType | ENUM | NO | Only PRICE_LEVEL is supported. See Pegged Orders |
| recvWindow | DECIMAL | NO | The value cannot be greater than 60000. Supports up to three decimal places of precision (e.g., 6000.346) so that microseconds may be specified. |
| timestamp | LONG | YES | Unix timestamp used to sign the request, in milliseconds or microseconds. The value must reflect the current client time and is validated by the server for signed endpoints. |
Data Source: Memory
Response:
Without computeCommissionRates
{}
With computeCommissionRates
{
// Standard commission rates on trades from the order.
"standardCommissionForOrder": {
"maker": "0.00000112",
"taker": "0.00000114"
},
// Special commission rates on trades from the order.
"specialCommissionForOrder": {
"maker": "0.05000000",
"taker": "0.06000000"
},
// Tax commission rates for trades from the order.
"taxCommissionForOrder": {
"maker": "0.00000112",
"taker": "0.00000114"
},
// Discount on standard commissions when paying in BNB.
"discount": {
"enabledForAccount": true,
"enabledForSymbol": true,
"discountAsset": "BNB",
"discount": "0.25000000"
}
}
Cancel order (TRADE)
DELETE /api/v3/order
Cancel an active order.
Weight: 1
Parameters:
| Name | Type | Mandatory | Description |
|---|---|---|---|
| symbol | STRING | YES | |
| orderId | LONG | NO | |
| origClientOrderId | STRING | NO | |
| newClientOrderId | STRING | NO | Used to uniquely identify this cancel. Automatically generated by default. |
| cancelRestrictions | ENUM | NO | Supported values: ONLY_NEW - Cancel will succeed if the order status is NEW.ONLY_PARTIALLY_FILLED - Cancel will succeed if order status is PARTIALLY_FILLED. For more information please refer to Regarding cancelRestrictions. |
| recvWindow | DECIMAL | NO | Maximum: 60000. Supports up to three decimal places of precision (e.g., 6000.346) so that microseconds may be specified. |
| timestamp | LONG | YES | Unix timestamp used to sign the request, in milliseconds or microseconds. The value must reflect the current client time and is validated by the server for signed endpoints. |
Data Source: Matching Engine
- Either
orderIdororigClientOrderIdmust be sent. - If both
orderIdandorigClientOrderIdare provided, theorderIdis searched first, then theorigClientOrderIdfrom that result is checked against that order. If both conditions are not met the request will be rejected.
Response:
{
"symbol": "LTCBTC",
"orderId": 4,
"orderListId": -1, // Unless it's part of an order list, value will be -1
"origClientOrderId": "myOrder1",
"clientOrderId": "cancelMyOrder1",
"transactTime": 1684804350068,
"price": "2.00000000",
"origQty": "1.00000000",
"executedQty": "0.00000000",
"origQuoteOrderQty": "0.000000",
"cummulativeQuoteQty": "0.00000000",
"status": "CANCELED",
"timeInForce": "GTC",
"type": "LIMIT",
"side": "BUY",
"selfTradePreventionMode": "NONE",
"icebergQty": "0.00000000", // Quantity for the iceberg order. Appears only if the parameter `icebergQty` was sent in the request.
"preventedMatchId": 0, // When used together with `symbol`, can be used to query a prevented match. Appears only if the order expired due to STP.
"preventedQuantity": "1.200000", // Order quantity that expired due to STP. Appears only if the order expired due to STP.
"stopPrice": "23500.00000000", // Price when the algorithmic order will be triggered. Appears for `STOP_LOSS`, `TAKE_PROFIT`, `STOP_LOSS_LIMIT`, and `TAKE_PROFIT_LIMIT` orders.
"strategyId": 37463720, // Can be used to label an order that's part of an order strategy. Appears if the parameter was populated in the request.
"strategyType": 1000000, // Can be used to label an order that is using an order strategy. Appears if the parameter was populated in the request.
"trailingDelta": 10, // Delta price change required before order activation. Appears for trailing stop orders.
"trailingTime": -1, // Time when the trailing order becomes active and starts tracking price changes. Appears only for trailing stop orders.
"usedSor": true, // Indicates whether the order used SOR. Appears when placing orders using SOR.
"workingFloor": "SOR", // Indicates whether the order is being filled by SOR or by the order book to which it was submitted. Appears when placing orders using SOR.
"pegPriceType": "PRIMARY_PEG", // Price peg type. Only for pegged orders.
"pegOffsetType": "PRICE_LEVEL", // Price peg offset type. Only for pegged orders, if requested.
"pegOffsetValue": 5, // Price peg offset value. Only for pegged orders, if requested.
"peggedPrice": "87523.83710000", // Current price the order is pegged at. Only for pegged orders, once determined.
"expiryReason": "INSUFFICIENT_LIQUIDITY" // Cause of the order's expiration. Returned when an order has expired.
}
Notes:
- The payload above does not show all fields that can appear in the order response. Please refer to Conditional fields in Order Responses.
- The performance for canceling an order (single cancel or as part of a cancel-replace) is always better when only
orderIdis sent. SendingorigClientOrderIdor bothorderId+origClientOrderIdwill be slower.
Regarding cancelRestrictions
- If the
cancelRestrictionsvalue is not any of the supported values, the error will be:
{
"code": -1145,
"msg": "Invalid cancelRestrictions"
}
- If the order did not pass the conditions for
cancelRestrictions, the error will be:
{
"code": -2011,
"msg": "Order was not canceled due to cancel restrictions."
}
Cancel All Open Orders on a Symbol (TRADE)
DELETE /api/v3/openOrders
Cancels all active orders on a symbol. This includes orders that are part of an order list.
Weight: 1
Parameters:
| Name | Type | Mandatory | Description |
|---|---|---|---|
| symbol | STRING | YES | |
| recvWindow | DECIMAL | NO | Maximum: 60000. Supports up to three decimal places of precision (e.g., 6000.346) so that microseconds may be specified. |
| timestamp | LONG | YES | Unix timestamp used to sign the request, in milliseconds or microseconds. The value must reflect the current client time and is validated by the server for signed endpoints. |
Data Source: Matching Engine
Response:
[
{
"symbol": "BTCUSDT",
"origClientOrderId": "E6APeyTJvkMvLMYMqu1KQ4",
"orderId": 11,
"orderListId": -1,
"clientOrderId": "pXLV6Hz6mprAcVYpVMTGgx",
"transactTime": 1684804350068,
"price": "0.089853",
"origQty": "0.178622",
"executedQty": "0.000000",
"origQuoteOrderQty": "0.000000",
"cummulativeQuoteQty": "0.000000",
"status": "CANCELED",
"timeInForce": "GTC",
"type": "LIMIT",
"side": "BUY",
"selfTradePreventionMode": "NONE"
},
{
"symbol": "BTCUSDT",
"origClientOrderId": "A3EF2HCwxgZPFMrfwbgrhv",
"orderId": 13,
"orderListId": -1,
"clientOrderId": "pXLV6Hz6mprAcVYpVMTGgx",
"transactTime": 1684804350069,
"price": "0.090430",
"origQty": "0.178622",
"executedQty": "0.000000",
"origQuoteOrderQty": "0.000000",
"cummulativeQuoteQty": "0.000000",
"status": "CANCELED",
"timeInForce": "GTC",
"type": "LIMIT",
"side": "BUY",
"selfTradePreventionMode": "NONE"
},
{
"orderListId": 1929,
"contingencyType": "OCO",
"listStatusType": "ALL_DONE",
"listOrderStatus": "ALL_DONE",
"listClientOrderId": "2inzWQdDvZLHbbAmAozX2N",
"transactionTime": 1585230948299,
"symbol": "BTCUSDT",
"orders": [
{
"symbol": "BTCUSDT",
"orderId": 20,
"clientOrderId": "CwOOIPHSmYywx6jZX77TdL"
},
{
"symbol": "BTCUSDT",
"orderId": 21,
"clientOrderId": "461cPg51vQjV3zIMOXNz39"
}
],
"orderReports": [
{
"symbol": "BTCUSDT",
"origClientOrderId": "CwOOIPHSmYywx6jZX77TdL",
"orderId": 20,
"orderListId": 1929,
"clientOrderId": "pXLV6Hz6mprAcVYpVMTGgx",
"transactTime": 1688005070874,
"price": "0.668611",
"origQty": "0.690354",
"executedQty": "0.000000",
"origQuoteOrderQty": "0.000000",
"cummulativeQuoteQty": "0.000000",
"status": "CANCELED",
"timeInForce": "GTC",
"type": "STOP_LOSS_LIMIT",
"side": "BUY",
"stopPrice": "0.378131",
"icebergQty": "0.017083",
"selfTradePreventionMode": "NONE"
},
{
"symbol": "BTCUSDT",
"origClientOrderId": "461cPg51vQjV3zIMOXNz39",
"orderId": 21,
"orderListId": 1929,
"clientOrderId": "pXLV6Hz6mprAcVYpVMTGgx",
"transactTime": 1688005070874,
"price": "0.008791",
"origQty": "0.690354",
"executedQty": "0.000000",
"origQuoteOrderQty": "0.000000",
"cummulativeQuoteQty": "0.000000",
"status": "CANCELED",
"timeInForce": "GTC",
"type": "LIMIT_MAKER",
"side": "BUY",
"icebergQty": "0.639962",
"selfTradePreventionMode": "NONE"
}
]
}
]
Cancel an Existing Order and Send a New Order (TRADE)
POST /api/v3/order/cancelReplace
- Cancels an existing order and places a new order on the same symbol.
- Filters and Order Count are evaluated before the processing of the cancellation and order placement occurs.
- A new order that was not attempted (i.e. when
newOrderResult: NOT_ATTEMPTED), will still increase the unfilled order count by 1. - You can only cancel an individual order from an orderList using this endpoint, but the result is the same as canceling the entire orderList.
Weight: 1
Unfilled Order Count: 1
Parameters:
| Name | Type | Mandatory | Description |
|---|---|---|---|
| symbol | STRING | YES | |
| side | ENUM | YES | |
| type | ENUM | YES | |
| cancelReplaceMode | ENUM | YES | The allowed values are: STOP_ON_FAILURE - If the cancel request fails, the new order placement will not be attempted. ALLOW_FAILURE - new order placement will be attempted even if cancel request fails. |
| timeInForce | ENUM | NO | |
| quantity | DECIMAL | NO | |
| quoteOrderQty | DECIMAL | NO | |
| price | DECIMAL | NO | |
| cancelNewClientOrderId | STRING | NO | Used to uniquely identify this cancel. Automatically generated by default. |
| cancelOrigClientOrderId | STRING | NO | Either cancelOrderId or cancelOrigClientOrderId must be sent. If both cancelOrderId and cancelOrigClientOrderId parameters are provided, the cancelOrderId is searched first, then the cancelOrigClientOrderId from that result is checked against that order. If both conditions are not met the request will be rejected. |
| cancelOrderId | LONG | NO | Either cancelOrderId or cancelOrigClientOrderId must be sent. If both cancelOrderId and cancelOrigClientOrderId parameters are provided, the cancelOrderId is searched first, then the cancelOrigClientOrderId from that result is checked against that order. If both conditions are not met the request will be rejected. |
| newClientOrderId | STRING | NO | Used to identify the new order. |
| strategyId | LONG | NO | |
| strategyType | INT | NO | The value cannot be less than 1000000. |
| stopPrice | DECIMAL | NO | |
| trailingDelta | LONG | NO | See Trailing Stop order FAQ |
| icebergQty | DECIMAL | NO | |
| newOrderRespType | ENUM | NO | Allowed values: ACK, RESULT, FULL MARKET and LIMIT orders types default to FULL; all other orders default to ACK |
| selfTradePreventionMode | ENUM | NO | The allowed enums is dependent on what is configured on the symbol. The possible supported values are: STP Modes. |
| cancelRestrictions | ENUM | NO | Supported values: ONLY_NEW - Cancel will succeed if the order status is NEW.ONLY_PARTIALLY_FILLED - Cancel will succeed if order status is PARTIALLY_FILLED. For more information please refer to Regarding cancelRestrictions. |
| orderRateLimitExceededMode | ENUM | NO | Supported values: DO_NOTHING (default)- will only attempt to cancel the order if account has not exceeded the unfilled order rate limitCANCEL_ONLY - will always cancel the order |
| pegPriceType | ENUM | NO | PRIMARY_PEG or MARKET_PEG See Pegged Orders |
| pegOffsetValue | INT | NO | Price level to peg the price to (max: 100) See Pegged Orders |
| pegOffsetType | ENUM | NO | Only PRICE_LEVEL is supported See Pegged Orders. |
| recvWindow | DECIMAL | NO | Maximum: 60000. Supports up to three decimal places of precision (e.g., 6000.346) so that microseconds may be specified. |
| timestamp | LONG | YES | Unix timestamp used to sign the request, in milliseconds or microseconds. The value must reflect the current client time and is validated by the server for signed endpoints. |
Data Source: Matching Engine
Similar to POST /api/v3/order, additional mandatory parameters are determined by type.
Response format varies depending on whether the processing of the message succeeded, partially succeeded, or failed.
| Request | Response | ||||
|---|---|---|---|---|---|
cancelReplaceMode |
orderRateLimitExceededMode |
Unfilled Order Count | cancelResult |
newOrderResult |
status |
STOP_ON_FAILURE |
DO_NOTHING |
Within Limits | ✅ SUCCESS |
✅ SUCCESS |
200 |
❌ FAILURE |
➖ NOT_ATTEMPTED |
400 |
|||
✅ SUCCESS |
❌ FAILURE |
409 |
|||
| Exceeds Limits | ✅ SUCCESS |
✅ SUCCESS |
N/A | ||
❌ FAILURE |
➖ NOT_ATTEMPTED |
N/A | |||
✅ SUCCESS |
❌ FAILURE |
N/A | |||
CANCEL_ONLY |
Within Limits | ✅ SUCCESS |
✅ SUCCESS |
200 |
|
❌ FAILURE |
➖ NOT_ATTEMPTED |
400 |
|||
✅ SUCCESS |
❌ FAILURE |
409 |
|||
| Exceeds Limits | ❌ FAILURE |
➖ NOT_ATTEMPTED |
429 |
||
✅ SUCCESS |
❌ FAILURE |
429 |
|||
ALLOW_FAILURE |
DO_NOTHING |
Within Limits | ✅ SUCCESS |
✅ SUCCESS |
200 |
❌ FAILURE |
❌ FAILURE |
400 |
|||
❌ FAILURE |
✅ SUCCESS |
409 |
|||
✅ SUCCESS |
❌ FAILURE |
409 |
|||
| Exceeds Limits | ✅ SUCCESS |
✅ SUCCESS |
N/A | ||
❌ FAILURE |
❌ FAILURE |
N/A | |||
❌ FAILURE |
✅ SUCCESS |
N/A | |||
✅ SUCCESS |
❌ FAILURE |
N/A | |||
CANCEL_ONLY |
Within Limits | ✅ SUCCESS |
✅ SUCCESS |
200 |
|
❌ FAILURE |
❌ FAILURE |
400 |
|||
❌ FAILURE |
✅ SUCCESS |
409 |
|||
✅ SUCCESS |
❌ FAILURE |
409 |
|||
| Exceeds Limits | ✅ SUCCESS |
✅ SUCCESS |
N/A |
||
❌ FAILURE |
❌ FAILURE |
400 |
|||
❌ FAILURE |
✅ SUCCESS |
N/A | |||
✅ SUCCESS |
❌ FAILURE |
409 |
|||
Response:
Both the cancel and the new order placement succeeded, and the account has not exceeded its unfilled order count:
{
"cancelResult": "SUCCESS",
"newOrderResult": "SUCCESS",
"cancelResponse": {
"symbol": "BTCUSDT",
"origClientOrderId": "DnLo3vTAQcjha43lAZhZ0y", // cancelOrigClientOrderId from request
"orderId": 9,
"orderListId": -1, // Unless it's part of an order list, value will be -1
"clientOrderId": "osxN3JXAtJvKvCqGeMWMVR", // cancelNewClientOrderId from request
"transactTime": 1684804350068,
"price": "0.01000000",
"origQty": "0.000100",
"executedQty": "0.00000000",
"origQuoteOrderQty": "0.000000",
"cummulativeQuoteQty": "0.00000000",
"status": "CANCELED",
"timeInForce": "GTC",
"type": "LIMIT",
"side": "SELL",
"selfTradePreventionMode": "NONE",
"icebergQty": "0.00000000", // Appears only if the parameter icebergQty was sent in the request.
"preventedMatchId": 0, // Appears only if the order expired due to STP.
"preventedQuantity": "1.200000", // Order quantity that expired due to STP.
"stopPrice": "0.00000000", // Appears for STOP_LOSS, TAKE_PROFIT, STOP_LOSS_LIMIT, and TAKE_PROFIT_LIMIT orders.
"strategyId": 1, // Appears only if the strategyId parameter was provided upon order placement.
"strategyType": 1000000, // Appears only if the strategyType parameter was provided upon order placement.
"trailingDelta": 10, // Delta price change required before order activation.
"trailingTime": -1, // Time when the trailing order is now active and tracking price changes.
"usedSor": true, // Field that determines whether order used SOR.
"workingFloor": "SOR", // Determines whether the order is being filled by the SOR or by the order book.
"pegPriceType": "PRIMARY_PEG", // Price peg type. Only for pegged orders.
"pegOffsetType": "PRICE_LEVEL", // Price peg offset type. Only for pegged orders, if requested.
"pegOffsetValue": 5, // Price peg offset value. Only for pegged orders, if requested.
"peggedPrice": "87523.83710000", // Current price order is pegged at. Only for pegged orders, once determined.
"expiryReason": "INSUFFICIENT_LIQUIDITY" // Cause of the order's expiration. Appears when an order has expired.
},
"newOrderResponse": {
"symbol": "BTCUSDT",
"orderId": 10,
"orderListId": -1, // Unless it's part of an order list, value will be -1
"clientOrderId": "wOceeeOzNORyLiQfw7jd8S",
"transactTime": 1652928801803,
"price": "0.02000000",
"origQty": "0.040000",
"executedQty": "0.00000000",
"origQuoteOrderQty": "0.000000",
"cummulativeQuoteQty": "0.00000000",
"status": "NEW",
"timeInForce": "GTC",
"type": "LIMIT",
"side": "BUY",
"workingTime": 1669277163808,
"fills": [],
"selfTradePreventionMode": "NONE",
"icebergQty": "0.00000000", // Appears only if the parameter icebergQty was sent in the request.
"preventedMatchId": 0, // Appears only if the order expired due to STP.
"preventedQuantity": "1.200000", // Order quantity that expired due to STP.
"stopPrice": "0.00000000", // Appears for STOP_LOSS, TAKE_PROFIT, STOP_LOSS_LIMIT, and TAKE_PROFIT_LIMIT orders.
"strategyId": 1, // Appears only if the strategyId parameter was provided upon order placement.
"strategyType": 1000000, // Appears only if the strategyType parameter was provided upon order placement.
"trailingDelta": 10, // Delta price change required before order activation.
"trailingTime": -1, // Time when the trailing order is now active and tracking price changes.
"usedSor": true, // Field that determines whether order used SOR.
"workingFloor": "SOR", // Determines whether the order is being filled by the SOR or by the order book.
"pegPriceType": "PRIMARY_PEG", // Price peg type. Only for pegged orders.
"pegOffsetType": "PRICE_LEVEL", // Price peg offset type. Only for pegged orders, if requested.
"pegOffsetValue": 5, // Price peg offset value. Only for pegged orders, if requested.
"peggedPrice": "87523.83710000", // Current price order is pegged at. Only for pegged orders, once determined.
"expiryReason": "INSUFFICIENT_LIQUIDITY" // Cause of the order's expiration. Appears when an order has expired.
}
}
Cancel order fails with STOP_ON_FAILURE, and the account has not exceeded its unfilled order count:
{
"code": -2022,
"msg": "Order cancel-replace failed.",
"data": {
"cancelResult": "FAILURE",
"newOrderResult": "NOT_ATTEMPTED",
"cancelResponse": {
"code": -2011,
"msg": "Unknown order sent."
},
"newOrderResponse": null
}
}
Both the cancel and the new order placement fail with cancelReplaceMode=ALLOW_FAILURE, and the account has not exceeded its unfilled order count:
{
"code": -2022,
"msg": "Order cancel-replace failed.",
"data": {
"cancelResult": "FAILURE",
"newOrderResult": "FAILURE",
"cancelResponse": {
"code": -2011,
"msg": "Unknown order sent."
},
"newOrderResponse": {
"code": -2010,
"msg": "Order would immediately match and take."
}
}
}
Cancel order succeeds but the new order placement fails, and the account has not exceeded its unfilled order count:
{
"code": -2021,
"msg": "Order cancel-replace partially failed.",
"data": {
"cancelResult": "SUCCESS",
"newOrderResult": "FAILURE",
"cancelResponse": {
"symbol": "BTCUSDT",
"origClientOrderId": "86M8erehfExV8z2RC8Zo8k", // cancelOrigClientOrderId from request
"orderId": 3,
"orderListId": -1,
"clientOrderId": "G1kLo6aDv2KGNTFcjfTSFq", // cancelNewClientOrderId from request
"transactTime": 1684804350068,
"price": "0.006123",
"origQty": "10000.000000",
"executedQty": "0.000000",
"origQuoteOrderQty": "0.000000",
"cummulativeQuoteQty": "0.000000",
"status": "CANCELED",
"timeInForce": "GTC",
"type": "LIMIT_MAKER",
"side": "SELL",
"selfTradePreventionMode": "NONE"
},
"newOrderResponse": {
"code": -2010,
"msg": "Order would immediately match and take."
}
}
}
Cancel order fails with ALLOW_FAILURE, and the account has not exceeded its unfilled order count:
{
"code": -2021,
"msg": "Order cancel-replace partially failed.",
"data": {
"cancelResult": "FAILURE",
"newOrderResult": "SUCCESS",
"cancelResponse": {
"code": -2011,
"msg": "Unknown order sent."
},
"newOrderResponse": {
"symbol": "BTCUSDT",
"orderId": 11,
"orderListId": -1,
"clientOrderId": "pfojJMg6IMNDKuJqDxvoxN",
"transactTime": 1648540168818
}
}
}
Using orderRateLimitExceededMode=CANCEL_ONLY, and the account has exceeded its unfilled order count:
{
"code": -2021,
"msg": "Order cancel-replace partially failed.",
"data": {
"cancelResult": "SUCCESS",
"newOrderResult": "FAILURE",
"cancelResponse": {
"symbol": "LTCBNB",
"origClientOrderId": "GKt5zzfOxRDSQLveDYCTkc", // cancelOrigClientOrderId from request
"orderId": 64,
"orderListId": -1,
"clientOrderId": "loehOJF3FjoreUBDmv739R", // cancelNewClientOrderId from request
"transactTime": 1715779007228,
"price": "1.00",
"origQty": "10.00000000",
"executedQty": "0.00000000",
"origQuoteOrderQty": "0.000000",
"cummulativeQuoteQty": "0.00",
"status": "CANCELED",
"timeInForce": "GTC",
"type": "LIMIT",
"side": "SELL",
"selfTradePreventionMode": "NONE"
},
"newOrderResponse": {
"code": -1015,
"msg": "Too many new orders; current limit is 1 orders per 10 SECOND."
}
}
}
Using orderRateLimitExceededMode=DO_NOTHING, and the account has exceeded its unfilled order count:
{
"code": -1015,
"msg": "Too many new orders; current limit is 1 orders per 10 SECOND."
}
Notes:
- The payload above does not show all fields that can appear. Please refer to Conditional fields in Order Responses.
- The performance for canceling an order (single cancel or as part of a cancel-replace) is always better when only
orderIdis sent. SendingorigClientOrderIdor bothorderId+origClientOrderIdwill be slower.
Order Amend Keep Priority (TRADE)
PUT /api/v3/order/amend/keepPriority
Reduce the quantity of an existing open order.
This adds 0 orders to the EXCHANGE_MAX_ORDERS filter and the MAX_NUM_ORDERS filter.
Read Order Amend Keep Priority FAQ to learn more.
Weight: 4
Unfilled Order Count: 0
Parameters:
| Name | Type | Mandatory | Description |
|---|---|---|---|
| symbol | STRING | YES | |
| orderId | LONG | NO | orderId or origClientOrderId must be sent |
| origClientOrderId | STRING | NO | orderId or origClientOrderId must be sent |
| newClientOrderId | STRING | NO | The new client order ID for the order after being amended. If not sent, one will be randomly generated. It is possible to reuse the current clientOrderId by sending it as the newClientOrderId. |
| newQty | DECIMAL | YES | newQty must be greater than 0 and less than the order's quantity. |
| recvWindow | DECIMAL | NO | The value cannot be greater than 60000. Supports up to three decimal places of precision (e.g., 6000.346) so that microseconds may be specified. |
| timestamp | LONG | YES | Unix timestamp used to sign the request, in milliseconds or microseconds. The value must reflect the current client time and is validated by the server for signed endpoints. |
Data Source: Matching Engine
Response:
Response for a single order:
{
"transactTime": 1741926410255,
"executionId": 75,
"amendedOrder": {
"symbol": "BTCUSDT",
"orderId": 33,
"orderListId": -1,
"origClientOrderId": "5xrgbMyg6z36NzBn2pbT8H",
"clientOrderId": "PFaq6hIHxqFENGfdtn4J6Q",
"price": "6.00000000",
"qty": "5.00000000",
"executedQty": "0.00000000",
"preventedQty": "0.00000000",
"quoteOrderQty": "0.00000000",
"cumulativeQuoteQty": "0.00000000",
"status": "NEW",
"timeInForce": "GTC",
"type": "LIMIT",
"side": "SELL",
"workingTime": 1741926410242,
"selfTradePreventionMode": "NONE"
}
}
Response for an order that is part of an Order list:
{
"transactTime": 1741926410255,
"executionId": 75,
"amendedOrder": {
"symbol": "BTCUSDT",
"orderId": 33,
"orderListId": -1,
"origClientOrderId": "5xrgbMyg6z36NzBn2pbT8H",
"clientOrderId": "PFaq6hIHxqFENGfdtn4J6Q",
"price": "6.00000000",
"qty": "5.00000000",
"executedQty": "0.00000000",
"preventedQty": "0.00000000",
"quoteOrderQty": "0.00000000",
"cumulativeQuoteQty": "0.00000000",
"status": "NEW",
"timeInForce": "GTC",
"type": "LIMIT",
"side": "SELL",
"workingTime": 1741926410242,
"selfTradePreventionMode": "NONE",
"icebergQty": "0.00000000", // Appears only if the parameter icebergQty was sent in the request.
"preventedMatchId": 0, // Appears only if the order expired due to STP.
"preventedQuantity": "1.200000", // Order quantity that expired due to STP.
"stopPrice": "0.00000000", // Appears for STOP_LOSS, TAKE_PROFIT, STOP_LOSS_LIMIT, and TAKE_PROFIT_LIMIT orders.
"strategyId": 1, // Appears only if the strategyId parameter was provided upon order placement.
"strategyType": 1000000, // Appears only if the strategyType parameter was provided upon order placement.
"trailingDelta": 10, // Delta price change required before order activation.
"trailingTime": -1, // Time when the trailing order is now active and tracking price changes.
"usedSor": true, // Field that determines whether order used SOR.
"workingFloor": "SOR", // Determines whether the order is being filled by the SOR or by the order book.
"pegPriceType": "PRIMARY_PEG", // Price peg type. Only for pegged orders.
"pegOffsetType": "PRICE_LEVEL", // Price peg offset type. Only for pegged orders, if requested.
"pegOffsetValue": 5, // Price peg offset value. Only for pegged orders, if requested.
"peggedPrice": "87523.83710000", // Current price order is pegged at. Only for pegged orders, once determined.
"expiryReason": "INSUFFICIENT_LIQUIDITY" // Cause of the order's expiration. Appears when an order has expired.
},
"listStatus": {
"orderListId": 1,
"contingencyType": "OTO",
"listOrderStatus": "EXECUTING",
"listClientOrderId": "AT7FTxZXylVSwRoZs52mt3",
"symbol": "BTCUSDT",
"orders": [
{
"symbol": "BTCUSDT",
"orderId": 8,
"clientOrderId": "GkwwHZUUbFtZOoH1YsZk9Q"
},
{
"symbol": "BTCUSDT",
"orderId": 9,
"clientOrderId": "UQ1Np3bmQ71jJzsSDW9Vpi"
}
]
}
}
Note: The payload above does not show all fields that can appear. Please refer to Conditional fields in Order Responses.
New OCO - Deprecated (TRADE)
POST /api/v3/order/oco
Send in a new OCO.
- Price Restrictions:
SELL: Limit Price > Last Price > Stop PriceBUY: Limit Price < Last Price < Stop Price
- Quantity Restrictions:
- Both legs must have the same quantity.
ICEBERGquantities however do not have to be the same
OCOadds 2 orders to theEXCHANGE_MAX_ORDERSfilter and theMAX_NUM_ORDERSfilter.
Weight: 1
Unfilled Order Count: 2
Parameters:
| Name | Type | Mandatory | Description |
|---|---|---|---|
| symbol | STRING | YES | |
| listClientOrderId | STRING | NO | A unique Id for the entire orderList |
| side | ENUM | YES | |
| quantity | DECIMAL | YES | |
| limitClientOrderId | STRING | NO | A unique Id for the limit order |
| price | DECIMAL | YES | |
| limitStrategyId | LONG | NO | |
| limitStrategyType | INT | NO | The value cannot be less than 1000000. |
| limitIcebergQty | DECIMAL | NO | Used to make the LIMIT_MAKER leg an iceberg order. |
| trailingDelta | LONG | NO | |
| stopClientOrderId | STRING | NO | A unique Id for the stop loss/stop loss limit leg |
| stopPrice | DECIMAL | YES | |
| stopStrategyId | LONG | NO | |
| stopStrategyType | INT | NO | The value cannot be less than 1000000. |
| stopLimitPrice | DECIMAL | NO | If provided, stopLimitTimeInForce is required. |
| stopIcebergQty | DECIMAL | NO | Used with STOP_LOSS_LIMIT leg to make an iceberg order. |
| stopLimitTimeInForce | ENUM | NO | Valid values are GTC/FOK/IOC |
| newOrderRespType | ENUM | NO | Format of the JSON response. Supported values: Order Response Type |
| selfTradePreventionMode | ENUM | NO | The allowed values are dependent on what is configured on the symbol. Supported values: STP Modes |
| recvWindow | DECIMAL | NO | The value cannot be greater than 60000. Supports up to three decimal places of precision (e.g., 6000.346) so that microseconds may be specified. |
| timestamp | LONG | YES | Unix timestamp used to sign the request, in milliseconds or microseconds. The value must reflect the current client time and is validated by the server for signed endpoints. |
Data Source: Matching Engine
Response:
{
"orderListId": 0,
"contingencyType": "OCO",
"listStatusType": "EXEC_STARTED",
"listOrderStatus": "EXECUTING",
"listClientOrderId": "JYVpp3F0f5CAG15DhtrqLp",
"transactionTime": 1563417480525,
"symbol": "LTCBTC",
"orders": [
{
"symbol": "LTCBTC",
"orderId": 2,
"clientOrderId": "Kk7sqHb9J6mJWTMDVW7Vos"
},
{
"symbol": "LTCBTC",
"orderId": 3,
"clientOrderId": "xTXKaGYd4bluPVp78IVRvl"
}
],
"orderReports": [
{
"symbol": "LTCBTC",
"orderId": 2,
"orderListId": 0,
"clientOrderId": "Kk7sqHb9J6mJWTMDVW7Vos",
"transactTime": 1563417480525,
"price": "0.000000",
"origQty": "0.624363",
"executedQty": "0.000000",
"origQuoteOrderQty": "0.000000",
"cummulativeQuoteQty": "0.000000",
"status": "NEW",
"timeInForce": "GTC",
"type": "STOP_LOSS",
"side": "BUY",
"stopPrice": "0.960664",
"workingTime": -1,
"selfTradePreventionMode": "NONE"
},
{
"symbol": "LTCBTC",
"orderId": 3,
"orderListId": 0,
"clientOrderId": "xTXKaGYd4bluPVp78IVRvl",
"transactTime": 1563417480525,
"price": "0.036435",
"origQty": "0.624363",
"executedQty": "0.000000",
"origQuoteOrderQty": "0.000000",
"cummulativeQuoteQty": "0.000000",
"status": "NEW",
"timeInForce": "GTC",
"type": "LIMIT_MAKER",
"side": "BUY",
"workingTime": 1563417480525,
"selfTradePreventionMode": "NONE"
}
]
}
New Order list - OCO (TRADE)
POST /api/v3/orderList/oco
Send in an one-cancels-the-other (OCO) pair, where activation of one order immediately cancels the other.
- An OCO has 2 orders called the above order and below order.
- One of the orders must be a
LIMIT_MAKER/TAKE_PROFIT/TAKE_PROFIT_LIMITorder and the other must beSTOP_LOSSorSTOP_LOSS_LIMITorder. - Price restrictions
- If the OCO is on the
SELLside:LIMIT_MAKER/TAKE_PROFIT_LIMITprice> Last Traded Price >STOP_LOSS/STOP_LOSS_LIMITstopPriceTAKE_PROFIT stopPrice> Last Traded Price >STOP_LOSS/STOP_LOSS_LIMIT stopPrice
- If the OCO is on the
BUYside:LIMIT_MAKER/TAKE_PROFIT_LIMIT price< Last Traded Price <stopPriceTAKE_PROFIT stopPrice< Last Traded Price <STOP_LOSS/STOP_LOSS_LIMIT stopPrice* OCOs add 2 orders to theEXCHANGE_MAX_ORDERSfilter and theMAX_NUM_ORDERSfilter.
- If the OCO is on the
- OCOs add 2 orders to the
EXCHANGE_MAX_ORDERSfilter and theMAX_NUM_ORDERSfilter.
Weight: 1
Unfilled Order Count: 2
Parameters:
| Name | Type | Mandatory | Description |
|---|---|---|---|
| symbol | STRING | YES | |
| listClientOrderId | STRING | NO | Arbitrary unique ID among open order lists. Automatically generated if not sent. A new order list with the same listClientOrderId is accepted only when the previous one is filled or completely expired. listClientOrderId is distinct from the aboveClientOrderId and the belowClientOrderId. |
| side | ENUM | YES | |
| quantity | DECIMAL | YES | Quantity for both orders of the order list. |
| aboveType | ENUM | YES | |
| aboveClientOrderId | STRING | NO | Arbitrary unique ID among open orders for the above order. Automatically generated if not sent. |
| aboveIcebergQty | LONG | NO | Note that this can only be used if aboveTimeInForce is GTC. |
| abovePrice | DECIMAL | NO | Can be used if aboveType is STOP_LOSS_LIMIT, LIMIT_MAKER, or TAKE_PROFIT_LIMIT to specify the limit price. |
| aboveStopPrice | DECIMAL | NO | Can be used if aboveType is STOP_LOSS, STOP_LOSS_LIMIT, TAKE_PROFIT, TAKE_PROFIT_LIMIT. Either aboveStopPrice or aboveTrailingDelta or both, must be specified. |
| aboveTrailingDelta | LONG | NO | See Trailing Stop order FAQ |
| aboveTimeInForce | ENUM | NO | Required if aboveType is STOP_LOSS_LIMIT or TAKE_PROFIT_LIMIT. |
| aboveStrategyId | LONG | NO | Arbitrary numeric value identifying the above order within an order strategy. |
| aboveStrategyType | INT | NO | Arbitrary numeric value identifying the above order strategy. Values smaller than 1000000 are reserved and cannot be used. |
| abovePegPriceType | ENUM | NO | PRIMARY_PEG or MARKET_PEG. See Pegged Orders |
| abovePegOffsetType | ENUM | NO | |
| abovePegOffsetValue | INT | NO | |
| belowType | ENUM | YES | Supported values: STOP_LOSS, STOP_LOSS_LIMIT, TAKE_PROFIT, TAKE_PROFIT_LIMIT |
| belowClientOrderId | STRING | NO | Arbitrary unique ID among open orders for the below order. Automatically generated if not sent. |
| belowIcebergQty | LONG | NO | Note that this can only be used if belowTimeInForce is GTC. |
| belowPrice | DECIMAL | NO | Can be used if belowType is STOP_LOSS_LIMIT, LIMIT_MAKER, or TAKE_PROFIT_LIMIT to specify the limit price. |
| belowStopPrice | DECIMAL | NO | Can be used if belowType is STOP_LOSS, STOP_LOSS_LIMIT, TAKE_PROFIT, TAKE_PROFIT_LIMIT. Either belowStopPrice or belowTrailingDelta or both, must be specified. |
| belowTrailingDelta | LONG | NO | See Trailing Stop order FAQ |
| belowTimeInForce | ENUM | NO | Required if belowType is STOP_LOSS_LIMIT or TAKE_PROFIT_LIMIT. |
| belowStrategyId | LONG | NO | Arbitrary numeric value identifying the below order within an order strategy. |
| belowStrategyType | INT | NO | Arbitrary numeric value identifying the below order strategy. Values smaller than 1000000 are reserved and cannot be used. |
| belowPegPriceType | ENUM | NO | See Pegged Orders |
| belowPegOffsetType | ENUM | NO | |
| belowPegOffsetValue | INT | NO | |
| newOrderRespType | ENUM | NO | Select response format: ACK, RESULT, FULL. |
| selfTradePreventionMode | ENUM | NO | The allowed enums is dependent on what is configured on the symbol. Supported values: STP Modes |
| recvWindow | DECIMAL | NO | The value cannot be greater than 60000. Supports up to three decimal places of precision (e.g., 6000.346) so that microseconds may be specified. |
| timestamp | LONG | YES | Unix timestamp used to sign the request, in milliseconds or microseconds. The value must reflect the current client time and is validated by the server for signed endpoints. |
Data Source: Matching Engine
Response:
{
"orderListId": 1,
"contingencyType": "OCO",
"listStatusType": "EXEC_STARTED",
"listOrderStatus": "EXECUTING",
"listClientOrderId": "lH1YDkuQKWiXVXHPSKYEIp",
"transactionTime": 1710485608839,
"symbol": "LTCBTC",
"orders": [
{
"symbol": "LTCBTC",
"orderId": 10,
"clientOrderId": "44nZvqpemY7sVYgPYbvPih"
},
{
"symbol": "LTCBTC",
"orderId": 11,
"clientOrderId": "NuMp0nVYnciDiFmVqfpBqK"
}
],
"orderReports": [
{
"symbol": "LTCBTC",
"orderId": 10,
"orderListId": 1,
"clientOrderId": "44nZvqpemY7sVYgPYbvPih",
"transactTime": 1710485608839,
"price": "1.00000000",
"origQty": "5.00000000",
"executedQty": "0.00000000",
"origQuoteOrderQty": "0.000000",
"cummulativeQuoteQty": "0.00000000",
"status": "NEW",
"timeInForce": "GTC",
"type": "STOP_LOSS_LIMIT",
"side": "SELL",
"stopPrice": "1.00000000",
"workingTime": -1,
"icebergQty": "1.00000000",
"selfTradePreventionMode": "NONE"
},
{
"symbol": "LTCBTC",
"orderId": 11,
"orderListId": 1,
"clientOrderId": "NuMp0nVYnciDiFmVqfpBqK",
"transactTime": 1710485608839,
"price": "3.00000000",
"origQty": "5.00000000",
"executedQty": "0.00000000",
"origQuoteOrderQty": "0.000000",
"cummulativeQuoteQty": "0.00000000",
"status": "NEW",
"timeInForce": "GTC",
"type": "LIMIT_MAKER",
"side": "SELL",
"workingTime": 1710485608839,
"selfTradePreventionMode": "NONE"
}
]
}
New Order list - OTO (TRADE)
POST /api/v3/orderList/oto
Place an OTO.
- An OTO (One-Triggers-the-Other) is an order list comprised of 2 orders.
- The first order is called the working order and must be
LIMITorLIMIT_MAKER. Initially, only the working order goes on the order book. - The second order is called the pending order. It can be any order type except for
MARKETorders using parameterquoteOrderQty. The pending order is only placed on the order book when the working order gets fully filled. - If either the working order or the pending order is cancelled individually, the other order in the order list will also be canceled or expired.
- When the order list is placed, if the working order gets immediately fully filled, the placement response will show the working order as
FILLEDbut the pending order will still appear asPENDING_NEW. You need to query the status of the pending order again to see its updated status. - OTOs add 2 orders to the
EXCHANGE_MAX_NUM_ORDERSfilter andMAX_NUM_ORDERSfilter.
Weight: 1
Unfilled Order Count: 2
Parameters:
| Name | Type | Mandatory | Description |
|---|---|---|---|
| symbol | STRING | YES | |
| listClientOrderId | STRING | NO | Arbitrary unique ID among open order lists. Automatically generated if not sent. A new order list with the same listClientOrderId is accepted only when the previous one is filled or completely expired. listClientOrderId is distinct from the workingClientOrderId and the pendingClientOrderId. |
| newOrderRespType | ENUM | NO | Format of the JSON response. Supported values: Order Response Type |
| selfTradePreventionMode | ENUM | NO | The allowed enums is dependent on what is configured on the symbol. Supported values: STP Modes |
| workingType | ENUM | YES | Supported values: LIMIT, LIMIT_MAKER |
| workingSide | ENUM | YES | Supported values: Order Side |
| workingClientOrderId | STRING | NO | Arbitrary unique ID among open orders for the working order. Automatically generated if not sent. |
| workingPrice | DECIMAL | YES | |
| workingQuantity | DECIMAL | YES | Sets the quantity for the working order. |
| workingIcebergQty | DECIMAL | NO | This can only be used if workingTimeInForce is GTC, or if workingType is LIMIT_MAKER. |
| workingTimeInForce | ENUM | NO | Supported values: Time In Force |
| workingStrategyId | LONG | NO | Arbitrary numeric value identifying the working order within an order strategy. |
| workingStrategyType | INT | NO | Arbitrary numeric value identifying the working order strategy. Values smaller than 1000000 are reserved and cannot be used. |
| pendingType | ENUM | YES | Supported values: Order Types. Note that MARKET orders using quoteOrderQty are not supported. |
| workingPegPriceType | ENUM | NO | See Pegged Orders |
| workingPegOffsetType | ENUM | NO | |
| workingPegOffsetValue | INT | NO | |
| pendingSide | ENUM | YES | Supported values: Order Side |
| pendingClientOrderId | STRING | NO | Arbitrary unique ID among open orders for the pending order. Automatically generated if not sent. |
| pendingPrice | DECIMAL | NO | |
| pendingStopPrice | DECIMAL | NO | |
| pendingTrailingDelta | DECIMAL | NO | |
| pendingQuantity | DECIMAL | YES | Sets the quantity for the pending order. |
| pendingIcebergQty | DECIMAL | NO | This can only be used if pendingTimeInForce is GTC or if pendingType is LIMIT_MAKER. |
| pendingTimeInForce | ENUM | NO | Supported values: Time In Force |
| pendingStrategyId | LONG | NO | Arbitrary numeric value identifying the pending order within an order strategy. |
| pendingStrategyType | INT | NO | Arbitrary numeric value identifying the pending order strategy. Values smaller than 1000000 are reserved and cannot be used. |
| pendingPegPriceType | ENUM | NO | See Pegged Orders |
| pendingPegOffsetType | ENUM | NO | |
| pendingPegOffsetValue | INT | NO | |
| recvWindow | DECIMAL | NO | The value cannot be greater than 60000. Supports up to three decimal places of precision (e.g., 6000.346) so that microseconds may be specified. |
| timestamp | LONG | YES | Unix timestamp used to sign the request, in milliseconds or microseconds. The value must reflect the current client time and is validated by the server for signed endpoints. |
Data Source: Matching Engine
Mandatory parameters based on pendingType or workingType
Depending on the pendingType or workingType, some optional parameters will become mandatory.
| Type | Additional mandatory parameters | Additional information |
|---|---|---|
workingType = LIMIT | workingTimeInForce | |
pendingType = LIMIT | pendingPrice, pendingTimeInForce | |
pendingType = STOP_LOSS or TAKE_PROFIT | pendingStopPrice and/or pendingTrailingDelta | |
pendingType = STOP_LOSS_LIMIT or TAKE_PROFIT_LIMIT | pendingPrice, pendingStopPrice and/or pendingTrailingDelta, pendingTimeInForce |
Response:
{
"orderListId": 0,
"contingencyType": "OTO",
"listStatusType": "EXEC_STARTED",
"listOrderStatus": "EXECUTING",
"listClientOrderId": "yl2ERtcar1o25zcWtqVBTC",
"transactionTime": 1712289389158,
"symbol": "LTCBTC",
"orders": [
{
"symbol": "LTCBTC",
"orderId": 4,
"clientOrderId": "Bq17mn9fP6vyCn75Jw1xya"
},
{
"symbol": "LTCBTC",
"orderId": 5,
"clientOrderId": "arLFo0zGJVDE69cvGBaU0d"
}
],
"orderReports": [
{
"symbol": "LTCBTC",
"orderId": 4,
"orderListId": 0,
"clientOrderId": "Bq17mn9fP6vyCn75Jw1xya",
"transactTime": 1712289389158,
"price": "1.00000000",
"origQty": "1.00000000",
"executedQty": "0.00000000",
"origQuoteOrderQty": "0.000000",
"cummulativeQuoteQty": "0.00000000",
"status": "NEW",
"timeInForce": "GTC",
"type": "LIMIT",
"side": "SELL",
"workingTime": 1712289389158,
"selfTradePreventionMode": "NONE"
},
{
"symbol": "LTCBTC",
"orderId": 5,
"orderListId": 0,
"clientOrderId": "arLFo0zGJVDE69cvGBaU0d",
"transactTime": 1712289389158,
"price": "0.00000000",
"origQty": "5.00000000",
"executedQty": "0.00000000",
"origQuoteOrderQty": "0.000000",
"cummulativeQuoteQty": "0.00000000",
"status": "PENDING_NEW",
"timeInForce": "GTC",
"type": "MARKET",
"side": "BUY",
"workingTime": -1,
"selfTradePreventionMode": "NONE"
}
]
}
Note: The payload above does not show all fields that can appear. Please refer to Conditional fields in Order Responses.
New Order list - OTOCO (TRADE)
POST /api/v3/orderList/otoco
Place an OTOCO.
- An OTOCO (One-Triggers-One-Cancels-the-Other) is an order list comprised of 3 orders.
- The first order is called the working order and must be
LIMITorLIMIT_MAKER. Initially, only the working order goes on the order book.- The behavior of the working order is the same as the OTO.
- OTOCO has 2 pending orders (pending above and pending below), forming an OCO pair. The pending orders are only placed on the order book when the working order gets fully filled.
- The rules of the pending above and pending below follow the same rules as the Order list OCO.
- OTOCOs add 3 orders to the
EXCHANGE_MAX_NUM_ORDERSfilter andMAX_NUM_ORDERSfilter.
Weight: 1
Unfilled Order Count: 3
Parameters:
| Name | Type | Mandatory | Description |
|---|---|---|---|
| symbol | STRING | YES | |
| listClientOrderId | STRING | NO | Arbitrary unique ID among open order lists. Automatically generated if not sent. A new order list with the same listClientOrderId is accepted only when the previous one is filled or completely expired. listClientOrderId is distinct from the workingClientOrderId, pendingAboveClientOrderId, and the pendingBelowClientOrderId. |
| newOrderRespType | ENUM | NO | Format of the JSON response. Supported values: Order Response Type |
| selfTradePreventionMode | ENUM | NO | The allowed enums is dependent on what is configured on the symbol. Supported values: STP Modes |
| workingType | ENUM | YES | Supported values: LIMIT, LIMIT_MAKER |
| workingSide | ENUM | YES | Supported values: Order Side |
| workingClientOrderId | STRING | NO | Arbitrary unique ID among open orders for the working order. Automatically generated if not sent. |
| workingPrice | DECIMAL | YES | |
| workingQuantity | DECIMAL | YES | Sets the quantity for the working order. |
| workingIcebergQty | DECIMAL | NO | This can only be used if workingTimeInForce is GTC, or if workingType is LIMIT_MAKER. |
| workingTimeInForce | ENUM | NO | Supported values: Time In Force |
| workingStrategyId | LONG | NO | Arbitrary numeric value identifying the working order within an order strategy. |
| workingStrategyType | INT | NO | Arbitrary numeric value identifying the working order strategy. Values smaller than 1000000 are reserved and cannot be used. |
| workingPegPriceType | ENUM | NO | See Pegged Orders |
| workingPegOffsetType | ENUM | NO | |
| workingPegOffsetValue | INT | NO | |
| pendingSide | ENUM | YES | Supported values: Order Side |
| pendingQuantity | DECIMAL | YES | Sets the quantity for the pending orders. |
| pendingAboveType | ENUM | YES | Supported values: STOP_LOSS_LIMIT, STOP_LOSS, LIMIT_MAKER, TAKE_PROFIT, TAKE_PROFIT_LIMIT |
| pendingAboveClientOrderId | STRING | NO | Arbitrary unique ID among open orders for the pending above order. Automatically generated if not sent. |
| pendingAbovePrice | DECIMAL | NO | Can be used if pendingAboveType is STOP_LOSS_LIMIT, LIMIT_MAKER, or TAKE_PROFIT_LIMIT to specify the limit price. |
| pendingAboveStopPrice | DECIMAL | NO | Can be used if pendingAboveType is STOP_LOSS, STOP_LOSS_LIMIT, TAKE_PROFIT, TAKE_PROFIT_LIMIT. |
| pendingAboveTrailingDelta | DECIMAL | NO | See Trailing Stop order FAQ |
| pendingAboveIcebergQty | DECIMAL | NO | This can only be used if pendingAboveTimeInForce is GTC or if pendingAboveType is LIMIT_MAKER. |
| pendingAboveTimeInForce | ENUM | NO | Required if pendingAboveType is STOP_LOSS_LIMIT or TAKE_PROFIT_LIMIT. |
| pendingAboveStrategyId | LONG | NO | Arbitrary numeric value identifying the pending above order within an order strategy. |
| pendingAboveStrategyType | INT | NO | Arbitrary numeric value identifying the pending above order strategy. Values smaller than 1000000 are reserved and cannot be used. |
| pendingAbovePegPriceType | ENUM | NO | See Pegged Orders |
| pendingAbovePegOffsetType | ENUM | NO | |
| pendingAbovePegOffsetValue | INT | NO | |
| pendingBelowType | ENUM | NO | Supported values: STOP_LOSS, STOP_LOSS_LIMIT, TAKE_PROFIT, TAKE_PROFIT_LIMIT |
| pendingBelowClientOrderId | STRING | NO | Arbitrary unique ID among open orders for the pending below order. Automatically generated if not sent. |
| pendingBelowPrice | DECIMAL | NO | Can be used if pendingBelowType is STOP_LOSS_LIMIT or TAKE_PROFIT_LIMIT to specify the limit price. |
| pendingBelowStopPrice | DECIMAL | NO | Can be used if pendingBelowType is STOP_LOSS, STOP_LOSS_LIMIT, TAKE_PROFIT, TAKE_PROFIT_LIMIT. Either pendingBelowStopPrice or pendingBelowTrailingDelta or both, must be specified. |
| pendingBelowTrailingDelta | DECIMAL | NO | See Trailing Stop order FAQ |
| pendingBelowIcebergQty | DECIMAL | NO | This can only be used if pendingBelowTimeInForce is GTC, or if pendingBelowType is LIMIT_MAKER. |
| pendingBelowTimeInForce | ENUM | NO | Required if pendingBelowType is STOP_LOSS_LIMIT or TAKE_PROFIT_LIMIT. |
| pendingBelowStrategyId | LONG | NO | Arbitrary numeric value identifying the pending below order within an order strategy. |
| pendingBelowStrategyType | INT | NO | Arbitrary numeric value identifying the pending below order strategy. Values smaller than 1000000 are reserved and cannot be used. |
| pendingBelowPegPriceType | ENUM | NO | See Pegged Orders |
| pendingBelowPegOffsetType | ENUM | NO | |
| pendingBelowPegOffsetValue | INT | NO | |
| recvWindow | DECIMAL | NO | The value cannot be greater than 60000. Supports up to three decimal places of precision (e.g., 6000.346) so that microseconds may be specified. |
| timestamp | LONG | YES | Unix timestamp used to sign the request, in milliseconds or microseconds. The value must reflect the current client time and is validated by the server for signed endpoints. |
Data Source: Matching Engine
Mandatory parameters based on pendingAboveType, pendingBelowType or workingType
Depending on the pendingAboveType/pendingBelowType or workingType, some optional parameters will become mandatory.
| Type | Additional mandatory parameters | Additional information |
|---|---|---|
workingType = LIMIT | workingTimeInForce | |
pendingAboveType= LIMIT_MAKER | pendingAbovePrice | |
pendingAboveType = STOP_LOSS/TAKE_PROFIT | pendingAboveStopPrice and/or pendingAboveTrailingDelta | |
pendingAboveType=STOP_LOSS_LIMIT/TAKE_PROFIT_LIMIT | pendingAbovePrice, pendingAboveStopPrice and/or pendingAboveTrailingDelta, pendingAboveTimeInForce | |
pendingBelowType= LIMIT_MAKER | pendingBelowPrice | |
pendingBelowType= STOP_LOSS/TAKE_PROFIT | pendingBelowStopPrice and/or pendingBelowTrailingDelta | |
pendingBelowType=STOP_LOSS_LIMIT/TAKE_PROFIT_LIMIT | pendingBelowPrice, pendingBelowStopPrice and/or pendingBelowTrailingDelta, pendingBelowTimeInForce |
Response:
{
"orderListId": 1,
"contingencyType": "OTO",
"listStatusType": "EXEC_STARTED",
"listOrderStatus": "EXECUTING",
"listClientOrderId": "RumwQpBaDctlUu5jyG5rs0",
"transactionTime": 1712291372842,
"symbol": "LTCBTC",
"orders": [
{
"symbol": "LTCBTC",
"orderId": 6,
"clientOrderId": "fM9Y4m23IFJVCQmIrlUmMK"
},
{
"symbol": "LTCBTC",
"orderId": 7,
"clientOrderId": "6pcQbFIzTXGZQ1e2MkGDq4"
},
{
"symbol": "LTCBTC",
"orderId": 8,
"clientOrderId": "r4JMv9cwAYYUwwBZfbussx"
}
],
"orderReports": [
{
"symbol": "LTCBTC",
"orderId": 6,
"orderListId": 1,
"clientOrderId": "fM9Y4m23IFJVCQmIrlUmMK",
"transactTime": 1712291372842,
"price": "1.00000000",
"origQty": "1.00000000",
"executedQty": "0.00000000",
"origQuoteOrderQty": "0.000000",
"cummulativeQuoteQty": "0.00000000",
"status": "NEW",
"timeInForce": "GTC",
"type": "LIMIT",
"side": "SELL",
"workingTime": 1712291372842,
"selfTradePreventionMode": "NONE"
},
{
"symbol": "LTCBTC",
"orderId": 7,
"orderListId": 1,
"clientOrderId": "6pcQbFIzTXGZQ1e2MkGDq4",
"transactTime": 1712291372842,
"price": "1.00000000",
"origQty": "5.00000000",
"executedQty": "0.00000000",
"origQuoteOrderQty": "0.000000",
"cummulativeQuoteQty": "0.00000000",
"status": "PENDING_NEW",
"timeInForce": "IOC",
"type": "STOP_LOSS_LIMIT",
"side": "BUY",
"stopPrice": "6.00000000",
"workingTime": -1,
"selfTradePreventionMode": "NONE"
},
{
"symbol": "LTCBTC",
"orderId": 8,
"orderListId": 1,
"clientOrderId": "r4JMv9cwAYYUwwBZfbussx",
"transactTime": 1712291372842,
"price": "3.00000000",
"origQty": "5.00000000",
"executedQty": "0.00000000",
"origQuoteOrderQty": "0.000000",
"cummulativeQuoteQty": "0.00000000",
"status": "PENDING_NEW",
"timeInForce": "GTC",
"type": "LIMIT_MAKER",
"side": "BUY",
"workingTime": -1,
"selfTradePreventionMode": "NONE"
}
]
}
Note: The payload above does not show all fields that can appear. Please refer to Conditional fields in Order Responses.
New Order List - OPO (TRADE)
POST /api/v3/orderList/opo
Place an OPO.
- OPOs add 2 orders to the
EXCHANGE_MAX_NUM_ORDERS`` filter andMAX_NUM_ORDERS`` filter.
Weight: 1
Unfilled Order Count: 2
Parameters:
| Name | Type | Mandatory | Description |
|---|---|---|---|
| symbol | STRING | YES | |
| listClientOrderId | STRING | NO | Arbitrary unique ID among open order lists. Automatically generated if not sent. A new order list with the same listClientOrderId is accepted only when the previous one is filled or completely expired. listClientOrderId is distinct from the workingClientOrderId and the pendingClientOrderId. |
| newOrderRespType | ENUM | NO | Format of the JSON response. Supported values: Order Response Type |
| selfTradePreventionMode | ENUM | NO | The allowed enums is dependent on what is configured on the symbol. Supported values: STP Modes |
| workingType | ENUM | YES | Supported values: LIMIT, LIMIT_MAKER |
| workingSide | ENUM | YES | Supported values: Order Side |
| workingClientOrderId | STRING | NO | Arbitrary unique ID among open orders for the working order. Automatically generated if not sent. |
| workingPrice | DECIMAL | YES | Price for the working order. |
| workingQuantity | DECIMAL | YES | Sets the quantity for the working order. |
| workingIcebergQty | DECIMAL | NO | This can only be used if workingTimeInForce is GTC, or if workingType is LIMIT_MAKER. |
| workingTimeInForce | ENUM | NO | Supported values: Time In Force |
| workingStrategyId | LONG | NO | Arbitrary numeric value identifying the working order within an order strategy. |
| workingStrategyType | INT | NO | Arbitrary numeric value identifying the working order strategy. Values smaller than 1000000 are reserved and cannot be used. |
| workingPegPriceType | ENUM | NO | See Pegged Orders |
| workingPegOffsetType | ENUM | NO | |
| workingPegOffsetValue | INT | NO | |
| pendingType | ENUM | YES | Supported values: Order Types. Note that MARKET orders using quoteOrderQty are not supported. |
| pendingSide | ENUM | YES | Supported values: Order Side |
| pendingClientOrderId | STRING | NO | Arbitrary unique ID among open orders for the pending order. Automatically generated if not sent. |
| pendingPrice | DECIMAL | NO | Price for the pending order. |
| pendingStopPrice | DECIMAL | NO | Stop price for the pending order. |
| pendingTrailingDelta | DECIMAL | NO | Trailing delta for the pending order. |
| pendingIcebergQty | DECIMAL | NO | This can only be used if pendingTimeInForce is GTC or if pendingType is LIMIT_MAKER. |
| pendingTimeInForce | ENUM | NO | Supported values: Time In Force |
| pendingStrategyId | LONG | NO | Arbitrary numeric value identifying the pending order within an order strategy. |
| pendingStrategyType | INT | NO | Arbitrary numeric value identifying the pending order strategy. Values smaller than 1000000 are reserved and cannot be used. |
| pendingPegPriceType | ENUM | NO | See Pegged Orders |
| pendingPegOffsetType | ENUM | NO | |
| pendingPegOffsetValue | INT | NO | |
| recvWindow | DECIMAL | NO | Maximum: 60000. Supports up to three decimal places of precision (e.g., 6000.346) so that microseconds may be specified. |
| timestamp | LONG | YES | Unix timestamp used to sign the request, in milliseconds or microseconds. The value must reflect the current client time and is validated by the server for signed endpoints. |
Data Source: Matching Engine
Response:
{
"orderListId": 0,
"contingencyType": "OTO",
"listStatusType": "EXEC_STARTED",
"listOrderStatus": "EXECUTING",
"listClientOrderId": "H94qCqO27P74OEiO4X8HOG",
"transactionTime": 1762998011671,
"symbol": "BTCUSDT",
"orders": [
{
"symbol": "BTCUSDT",
"orderId": 2,
"clientOrderId": "JX6xfdjo0wysiGumfHNmPu"
},
{
"symbol": "BTCUSDT",
"orderId": 3,
"clientOrderId": "2ZJCY0IjOhuYIMLGN8kU8S"
}
],
"orderReports": [
{
"symbol": "BTCUSDT",
"orderId": 2,
"orderListId": 0,
"clientOrderId": "JX6xfdjo0wysiGumfHNmPu",
"transactTime": 1762998011671,
"price": "102264.00000000",
"origQty": "0.00060000",
"executedQty": "0.00000000",
"origQuoteOrderQty": "0.00000000",
"cummulativeQuoteQty": "0.00000000",
"status": "NEW",
"timeInForce": "GTC",
"type": "LIMIT",
"side": "BUY",
"workingTime": 1762998011671,
"selfTradePreventionMode": "NONE"
},
{
"symbol": "BTCUSDT",
"orderId": 3,
"orderListId": 0,
"clientOrderId": "2ZJCY0IjOhuYIMLGN8kU8S",
"transactTime": 1762998011671,
"price": "0.00000000",
"executedQty": "0.00000000",
"origQuoteOrderQty": "0.00000000",
"cummulativeQuoteQty": "0.00000000",
"status": "PENDING_NEW",
"timeInForce": "GTC",
"type": "MARKET",
"side": "SELL",
"workingTime": -1,
"selfTradePreventionMode": "NONE"
}
]
}
Note: The payload above does not show all fields that can appear. Please refer to Conditional fields in Order Responses.
New Order List - OPOCO (TRADE)
POST /api/v3/orderList/opoco
Place an OPOCO.
Weight: 1
Unfilled Order Count: 3
Parameters:
| Name | Type | Mandatory | Description |
|---|---|---|---|
| symbol | STRING | YES | |
| listClientOrderId | STRING | NO | Arbitrary unique ID among open order lists. Automatically generated if not sent. A new order list with the same listClientOrderId is accepted only when the previous one is filled or completely expired. listClientOrderId is distinct from the workingClientOrderId, pendingAboveClientOrderId, and the pendingBelowClientOrderId. |
| newOrderRespType | ENUM | NO | Format of the JSON response. Supported values: Order Response Type |
| selfTradePreventionMode | ENUM | NO | The allowed enums is dependent on what is configured on the symbol. Supported values: STP Modes |
| workingType | ENUM | YES | |
| workingSide | ENUM | YES | Supported values: Order Side |
| workingClientOrderId | STRING | NO | Arbitrary unique ID among open orders for the working order. Automatically generated if not sent. |
| workingPrice | DECIMAL | YES | Price for the working order. |
| workingQuantity | DECIMAL | YES | Sets the quantity for the working order. |
| workingIcebergQty | DECIMAL | NO | This can only be used if workingTimeInForce is GTC, or if workingType is LIMIT_MAKER. |
| workingTimeInForce | ENUM | NO | Supported values: Time In Force |
| workingStrategyId | LONG | NO | Arbitrary numeric value identifying the working order within an order strategy. |
| workingStrategyType | INT | NO | Arbitrary numeric value identifying the working order strategy. Values smaller than 1000000 are reserved and cannot be used. |
| workingPegPriceType | ENUM | NO | See Pegged Orders |
| workingPegOffsetType | ENUM | NO | See Pegged Orders |
| workingPegOffsetValue | INT | NO | Price level for pegging (max: 100). See Pegged Orders |
| pendingSide | ENUM | YES | Supported values: Order Side |
| pendingAboveType | ENUM | YES | Supported values: STOP_LOSS_LIMIT, STOP_LOSS, LIMIT_MAKER, TAKE_PROFIT, TAKE_PROFIT_LIMIT |
| pendingAboveClientOrderId | STRING | NO | Arbitrary unique ID among open orders for the pending above order. Automatically generated if not sent. |
| pendingAbovePrice | DECIMAL | NO | Can be used if pendingAboveType is STOP_LOSS_LIMIT, LIMIT_MAKER, or TAKE_PROFIT_LIMIT to specify the limit price. |
| pendingAboveStopPrice | DECIMAL | NO | Can be used if pendingAboveType is STOP_LOSS, STOP_LOSS_LIMIT, TAKE_PROFIT, TAKE_PROFIT_LIMIT. |
| pendingAboveTrailingDelta | DECIMAL | NO | See Trailing Stop order FAQ |
| pendingAboveIcebergQty | DECIMAL | NO | This can only be used if pendingAboveTimeInForce is GTC or pendingAboveType is LIMIT_MAKER. |
| pendingAboveTimeInForce | ENUM | NO | Required if pendingAboveType is STOP_LOSS_LIMIT or TAKE_PROFIT_LIMIT. |
| pendingAboveStrategyId | LONG | NO | Arbitrary numeric value identifying the pending above order within an order strategy. |
| pendingAboveStrategyType | INT | NO | Arbitrary numeric value identifying the pending above order strategy. Values smaller than 1000000 are reserved and cannot be used. |
| pendingAbovePegPriceType | ENUM | NO | See Pegged Orders |
| pendingAbovePegOffsetType | ENUM | NO | See Pegged Orders |
| pendingAbovePegOffsetValue | INT | NO | Price level for pegging (max: 100). See Pegged Orders |
| pendingBelowType | ENUM | NO | Supported values: STOP_LOSS, STOP_LOSS_LIMIT, TAKE_PROFIT, TAKE_PROFIT_LIMIT |
| pendingBelowClientOrderId | STRING | NO | Arbitrary unique ID among open orders for the pending below order. Automatically generated if not sent. |
| pendingBelowPrice | DECIMAL | NO | Can be used if pendingBelowType is STOP_LOSS_LIMIT or TAKE_PROFIT_LIMIT to specify the limit price. |
| pendingBelowStopPrice | DECIMAL | NO | Can be used if pendingBelowType is STOP_LOSS, STOP_LOSS_LIMIT, TAKE_PROFIT, TAKE_PROFIT_LIMIT. Either pendingBelowStopPrice or pendingBelowTrailingDelta or both, must be specified. |
| pendingBelowTrailingDelta | DECIMAL | NO | See Trailing Stop order FAQ |
| pendingBelowIcebergQty | DECIMAL | NO | This can only be used if pendingBelowTimeInForce is GTC or pendingBelowType is LIMIT_MAKER. |
| pendingBelowTimeInForce | ENUM | NO | Supported values: Time In Force |
| pendingBelowStrategyId | LONG | NO | Arbitrary numeric value identifying the pending below order within an order strategy. |
| pendingBelowStrategyType | INT | NO | Arbitrary numeric value identifying the pending below order strategy. Values smaller than 1000000 are reserved and cannot be used. |
| pendingBelowPegPriceType | ENUM | NO | See Pegged Orders |
| pendingBelowPegOffsetType | ENUM | NO | |
| pendingBelowPegOffsetValue | INT | NO | |
| recvWindow | DECIMAL | NO | The value cannot be greater than 60000. Supports up to three decimal places of precision (e.g., 6000.346) so that microseconds may be specified. |
| timestamp | LONG | YES | Unix timestamp used to sign the request, in milliseconds or microseconds. The value must reflect the current client time and is validated by the server for signed endpoints. |
Data Source: Matching Engine
Response:
{
"orderListId": 2,
"contingencyType": "OTO",
"listStatusType": "EXEC_STARTED",
"listOrderStatus": "EXECUTING",
"listClientOrderId": "bcedxMpQG6nFrZUPQyshoL",
"transactionTime": 1763000506354,
"symbol": "BTCUSDT",
"orders": [
{
"symbol": "BTCUSDT",
"orderId": 9,
"clientOrderId": "OLSBhMWaIlLSzZ9Zm7fnKB"
},
{
"symbol": "BTCUSDT",
"orderId": 10,
"clientOrderId": "mfif39yPTHsB3C0FIXznR2"
},
{
"symbol": "BTCUSDT",
"orderId": 11,
"clientOrderId": "yINkaXSJeoi3bU5vWMY8Z8"
}
],
"orderReports": [
{
"symbol": "BTCUSDT",
"orderId": 9,
"orderListId": 2,
"clientOrderId": "OLSBhMWaIlLSzZ9Zm7fnKB",
"transactTime": 1763000506354,
"price": "102496.00000000",
"origQty": "0.00170000",
"executedQty": "0.00000000",
"origQuoteOrderQty": "0.00000000",
"cummulativeQuoteQty": "0.00000000",
"status": "NEW",
"timeInForce": "GTC",
"type": "LIMIT",
"side": "BUY",
"workingTime": 1763000506354,
"selfTradePreventionMode": "NONE"
},
{
"symbol": "BTCUSDT",
"orderId": 10,
"orderListId": 2,
"clientOrderId": "mfif39yPTHsB3C0FIXznR2",
"transactTime": 1763000506354,
"price": "101613.00000000",
"executedQty": "0.00000000",
"origQuoteOrderQty": "0.00000000",
"cummulativeQuoteQty": "0.00000000",
"status": "PENDING_NEW",
"timeInForce": "GTC",
"type": "STOP_LOSS_LIMIT",
"side": "SELL",
"stopPrice": "10100.00000000",
"workingTime": -1,
"selfTradePreventionMode": "NONE"
},
{
"symbol": "BTCUSDT",
"orderId": 11,
"orderListId": 2,
"clientOrderId": "yINkaXSJeoi3bU5vWMY8Z8",
"transactTime": 1763000506354,
"price": "104261.00000000",
"executedQty": "0.00000000",
"origQuoteOrderQty": "0.00000000",
"cummulativeQuoteQty": "0.00000000",
"status": "PENDING_NEW",
"timeInForce": "GTC",
"type": "LIMIT_MAKER",
"side": "SELL",
"workingTime": -1,
"selfTradePreventionMode": "NONE"
}
]
}
Note: The payload above does not show all fields that can appear. Please refer to Conditional fields in Order Responses.
Cancel Order list (TRADE)
DELETE /api/v3/orderList
Cancel an entire Order list
Weight: 1
Parameters:
| Name | Type | Mandatory | Description |
|---|---|---|---|
| symbol | STRING | YES | |
| orderListId | LONG | NO | Either orderListId or listClientOrderId must be provided |
| listClientOrderId | STRING | NO | Either orderListId or listClientOrderId must be provided |
| newClientOrderId | STRING | NO | Used to uniquely identify this cancel. Automatically generated by default. |
| recvWindow | DECIMAL | NO | Maximum: 60000. Supports up to three decimal places of precision (e.g., 6000.346) so that microseconds may be specified. |
| timestamp | LONG | YES | Unix timestamp used to sign the request, in milliseconds or microseconds. The value must reflect the current client time and is validated by the server for signed endpoints. |
Data Source: Matching Engine
Notes:
- Canceling an individual order from an order list will cancel the entire order list.
- If both orderListId and listClientOrderId parameters are provided, the orderListId is searched first, then the listClientOrderId from that result is checked against that order. If both conditions are not met the request will be rejected.
Response:
{
"orderListId": 0,
"contingencyType": "OCO",
"listStatusType": "ALL_DONE",
"listOrderStatus": "ALL_DONE",
"listClientOrderId": "C3wyj4WVEktd7u9aVBRXcN",
"transactionTime": 1574040868128,
"symbol": "LTCBTC",
"orders": [
{
"symbol": "LTCBTC",
"orderId": 2,
"clientOrderId": "pO9ufTiFGg3nw2fOdgeOXa"
},
{
"symbol": "LTCBTC",
"orderId": 3,
"clientOrderId": "TXOvglzXuaubXAaENpaRCB"
}
],
"orderReports": [
{
"symbol": "LTCBTC",
"origClientOrderId": "pO9ufTiFGg3nw2fOdgeOXa",
"orderId": 2,
"orderListId": 0,
"clientOrderId": "unfWT8ig8i0uj6lPuYLez6",
"transactTime": 1688005070874,
"price": "1.00000000",
"origQty": "10.00000000",
"executedQty": "0.00000000",
"origQuoteOrderQty": "0.000000",
"cummulativeQuoteQty": "0.00000000",
"status": "CANCELED",
"timeInForce": "GTC",
"type": "STOP_LOSS_LIMIT",
"side": "SELL",
"stopPrice": "1.00000000", // Appears for STOP_LOSS, TAKE_PROFIT, STOP_LOSS_LIMIT, and TAKE_PROFIT_LIMIT orders.
"selfTradePreventionMode": "NONE"
},
{
"symbol": "LTCBTC",
"origClientOrderId": "TXOvglzXuaubXAaENpaRCB",
"orderId": 3,
"orderListId": 0,
"clientOrderId": "unfWT8ig8i0uj6lPuYLez6",
"transactTime": 1688005070874,
"price": "3.00000000",
"origQty": "10.00000000",
"executedQty": "0.00000000",
"origQuoteOrderQty": "0.000000",
"cummulativeQuoteQty": "0.00000000",
"status": "CANCELED",
"timeInForce": "GTC",
"type": "LIMIT_MAKER",
"side": "SELL",
"selfTradePreventionMode": "NONE"
}
]
}
New order using SOR (TRADE)
POST /api/v3/sor/order
Places an order using smart order routing (SOR).
This adds 1 order to the EXCHANGE_MAX_ORDERS filter and the MAX_NUM_ORDERS filter.
Read SOR FAQ to learn more.
Weight: 1
Unfilled Order Count: 1
Parameters:
| Name | Type | Mandatory | Description |
|---|---|---|---|
| symbol | STRING | YES | |
| side | ENUM | YES | |
| type | ENUM | YES | |
| timeInForce | ENUM | NO | |
| quantity | DECIMAL | YES | |
| price | DECIMAL | NO | |
| newClientOrderId | STRING | NO | A unique id among open orders. Automatically generated if not sent. Orders with the same newClientOrderID can be accepted only when the previous one is filled, otherwise the order will be rejected. |
| strategyId | LONG | NO | |
| strategyType | INT | NO | The value cannot be less than 1000000. |
| icebergQty | DECIMAL | NO | Used with LIMIT to create an iceberg order. |
| newOrderRespType | ENUM | NO | Set the response JSON. ACK, RESULT, or FULL. Default to FULL |
| selfTradePreventionMode | ENUM | NO | The allowed enums is dependent on what is configured on the symbol. The possible supported values are: STP Modes. |
| recvWindow | DECIMAL | NO | The value cannot be greater than 60000. Supports up to three decimal places of precision (e.g., 6000.346) so that microseconds may be specified. |
| timestamp | LONG | YES | Unix timestamp used to sign the request, in milliseconds or microseconds. The value must reflect the current client time and is validated by the server for signed endpoints. |
Data Source: Matching Engine
Note: POST /api/v3/sor/order only supports LIMIT and MARKET orders. quoteOrderQty is not supported.
Response:
{
"symbol": "BTCUSDT",
"orderId": 2,
"orderListId": -1,
"clientOrderId": "sBI1KM6nNtOfj5tccZSKly",
"transactTime": 1689149087774,
"price": "31000.00000000",
"origQty": "0.50000000",
"executedQty": "0.50000000",
"origQuoteOrderQty": "0.000000",
"cummulativeQuoteQty": "14000.00000000",
"status": "FILLED",
"timeInForce": "GTC",
"type": "LIMIT",
"side": "BUY",
"workingTime": 1689149087774,
"fills": [
{
"matchType": "ONE_PARTY_TRADE_REPORT",
"price": "28000.00000000",
"qty": "0.50000000",
"commission": "0.00000000",
"commissionAsset": "BTC",
"tradeId": -1,
"allocId": 0
}
],
"workingFloor": "SOR",
"selfTradePreventionMode": "NONE",
"usedSor": true
}
Test new order using SOR (TRADE)
POST /api/v3/sor/order/test
Test new order creation and signature/recvWindow using smart order routing (SOR). Creates and validates a new order but does not send it into the matching engine.
Weight:
| Condition | Weight |
|---|---|
Without computeCommissionRates | 1 |
With computeCommissionRates | 20 |
Parameters:
| Name | Type | Mandatory | Description |
|---|---|---|---|
| computeCommissionRates | BOOLEAN | NO | Default: false. |
| symbol | STRING | YES | |
| side | ENUM | YES | Please see Enums for supported values. |
| type | ENUM | YES | Please see Enums for supported values. |
| timeInForce | ENUM | NO | Please see Enums for supported values. |
| quantity | DECIMAL | YES | |
| price | DECIMAL | NO | |
| newClientOrderId | STRING | NO | A unique id among open orders. Automatically generated if not sent. Orders with the same newClientOrderID can be accepted only when the previous one is filled, otherwise the order will be rejected. |
| strategyId | LONG | NO | |
| strategyType | INT | NO | The value cannot be less than 1000000. |
| icebergQty | DECIMAL | NO | Used with LIMIT to create an iceberg order. |
| newOrderRespType | ENUM | NO | Set the response JSON. ACK, RESULT, or FULL. Default to FULL. |
| selfTradePreventionMode | ENUM | NO | The allowed enums is dependent on what is configured on the symbol. Supported values: STP Modes |
| recvWindow | DECIMAL | NO | The value cannot be greater than 60000. Supports up to three decimal places of precision (e.g., 6000.346) so that microseconds may be specified. |
| timestamp | LONG | YES | Unix timestamp used to sign the request, in milliseconds or microseconds. The value must reflect the current client time and is validated by the server for signed endpoints. |
Data Source: Memory
Response:
Without computeCommissionRates
{}
With computeCommissionRates
{
// Standard commission rates on trades from the order.
"standardCommissionForOrder": {
"maker": "0.00000112",
"taker": "0.00000114"
},
// Tax commission rates for trades from the order.
"taxCommissionForOrder": {
"maker": "0.00000112",
"taker": "0.00000114"
},
// Discount on standard commissions when paying in BNB.
"discount": {
"enabledForAccount": true,
"enabledForSymbol": true,
"discountAsset": "BNB",
"discount": "0.25000000"
}
}