USER DATA STREAM
outboundAccountInfohas been removed.
New API clusters have been added in order to improve performance.
Users can access any of the following API clusters, in addition to api.binance.com
If there are any performance issues with accessing api.binance.com please try any of the following instead:
- https://api1.binance.com/api/v3/*
- https://api2.binance.com/api/v3/*
- https://api3.binance.com/api/v3/*
USER DATA STREAM
outboundAccountInfohas been deprecated.outboundAccountInfowill be removed in the future. (Exact date unknown) Please useoutboundAccountPositioninstead.outboundAccountInfowill now only show the balance of non-zero assets and assets that have been reduced to 0.
- From 2020-05-01 UTC 00:00, all symbols will have a limit of 200 open orders using the MAX_NUM_ORDERS filter.
- No existing orders will be removed or canceled.
- Accounts that have 200 or more open orders on a symbol will not be able to place new orders on that symbol until the open order count is below 200.
- OCO orders count as 2 open orders before the
LIMITorder is touched or theSTOP_LOSS(orSTOP_LOSS_LIMIT) order is triggered; once this happens the other order is canceled and will no longer count as an open order.
- New field
permissions- Defines the trading permissions that are allowed on accounts and symbols.
permissionsis an enum array; values:SPOTMARGIN
permissionswill replaceisSpotTradingAllowedandisMarginTradingAllowedonGET api/v3/exchangeInfoin future API versions (v4+).- For an account to trade on a symbol, the account and symbol must share at least 1 permission in common.
- Updates to
GET api/v3/exchangeInfo- New field
permissionsadded. - New field
quoteAssetPrecisionadded; a duplicate of thequotePrecisionfield.quotePrecisionwill be removed in future API versions (v4+).
- New field
- Updates to
GET api/v3/account- New field
permissionsadded.
- New field
- New endpoint
DELETE api/v3/openOrders- This will allow a user to cancel all open orders on a single symbol.
- This endpoint will cancel all open orders including OCO orders.
- Orders can be canceled via the API on symbols in the
BREAKorHALTstatus.
OutboundAccountInfohas new fieldPwhich shows the trading permissions of the account.
WEB SOCKET STREAM
- WebSocket connections have a limit of 5 incoming messages per second. A message is considered:
- A PING frame
- A PONG frame
- A JSON control message (e.g. subscribe, unsubscribe)
- A connection that goes beyond the limit will be disconnected; IPs that are repeatedly disconnected may be banned.
- A single connection can listen to a maximum of 1024 streams.
MAX_POSITIONfilter added.-
This filter defines the allowed maximum position an account can have on the base asset of a symbol. An account's position defined as the sum of the account's:
- free balance of the base asset
- locked balance of the base asset
- sum of the qty of all open BUY orders
-
BUYorders will be rejected if the account's position is greater than the maximum position allowed.
-
- Quote Order Qty Market orders have been enabled on all symbols.
- Quote Order Qty
MARKETorders allow a user to specify the totalquoteOrderQtyspent or received in theMARKETorder. - Quote Order Qty
MARKETorders will not breakLOT_SIZEfilter rules; the order will execute a quantity that will have the notional value as close as possible toquoteOrderQty. - Using
BNBBTCas an example:- On the
BUYside, the order will buy as many BNB asquoteOrderQtyBTC can. - On the
SELLside, the order will sell as much BNB as needed to receivequoteOrderQtyBTC.
- On the
- Quote Order Qty
- api/v3/exchangeInfo has new fields:
quoteOrderQtyMarketAllowedbaseCommissionDecimalPlacesquoteCommissionDecimalPlaces
MARKETorders have a new optional field:quoteOrderQtyused to specify the quote quantity to BUY or SELL. This cannot be used in combination withquantity.- The exact timing that
quoteOrderQtyMARKET orders will be enabled is TBD. There will be a separate announcement and further details at that time.
- The exact timing that
- All order query endpoints will return a new field
origQuoteOrderQtyin the JSON payload. (e.g. GET api/v3/allOrders) - Updated error messages for -1128
- Sending an
OCOwith astopLimitPricebut without astopLimitTimeInForcewill return the error:
{ "code": -1128, "msg": "Combination of optional parameters invalid. Recommendation: 'stopLimitTimeInForce' should also be sent." } - Sending an
- Updated error messages for -1003 to specify the limit is referring to the request weight, not to the number of requests.
Deprecation of v1 endpoints:
By end of Q1 2020, the following endpoints will be removed from the API. The documentation has been updated to use the v3 versions of these endpoints.
- GET api/v1/depth
- GET api/v1/historicalTrades
- GET api/v1/aggTrades
- GET api/v1/klines
- GET api/v1/ticker/24hr
- GET api/v1/ticker/price
- GET api/v1/exchangeInfo
- POST api/v1/userDataStream
- PUT api/v1/userDataStream
- GET api/v1/ping
- GET api/v1/time
- GET api/v1/ticker/bookTicker
These endpoints however, will NOT be migrated to v3. Please use the following endpoints instead moving forward.
| Old V1 Endpoints | New V3 Endpoints |
|---|---|
| GET api/v1/ticker/allPrices | GET api/v3/ticker/price |
| GET api/v1/ticker/allBookTickers | GET api/v3/ticker/bookTicker |
-
Changes to
executionReportevent- If the C field is empty, it will now properly return
null, instead of"null". - New field Q which represents the
quoteOrderQty.
- If the C field is empty, it will now properly return
-
balanceUpdateevent type added- This event occurs when funds are deposited or withdrawn from your account.
- WSS now supports live subscribing/unsubscribing to streams.
- New WebSocket streams for bookTickers added:
<symbol>@bookTickerand!bookTicker. Seeweb-socket-streams.mdfor details.
- Faster order book data with 100ms updates:
<symbol>@depth@100msand<symbol>@depth#@100ms - Added "Update Speed:" to
web-socket-streams.md - Removed deprecated v1 endpoints as per previous announcement:
- GET api/v1/order
- GET api/v1/openOrders
- POST api/v1/order
- DELETE api/v1/order
- GET api/v1/allOrders
- GET api/v1/account
- GET api/v1/myTrades
- GET api/v1/depth
limitof 10000 has been temporarily removed
-
In Q4 2017, the following endpoints were deprecated and removed from the API documentation. They have been permanently removed from the API as of this version. We apologize for the omission from the original changelog:
- GET api/v1/order
- GET api/v1/openOrders
- POST api/v1/order
- DELETE api/v1/order
- GET api/v1/allOrders
- GET api/v1/account
- GET api/v1/myTrades
-
Streams, endpoints, parameters, payloads, etc. described in the documents in this repository are considered official and supported. The use of any other streams, endpoints, parameters, or payloads, etc. is not supported; use them at your own risk and with no guarantees.
-
New order type: OCO ("One Cancels the Other")
-
An OCO has 2 orders: (also known as legs in financial terms)
STOP_LOSSorSTOP_LOSS_LIMITlegLIMIT_MAKERleg
-
Price Restrictions:
SELL Orders: Limit Price > Last Price > Stop PriceBUY Orders: Limit Price < Last Price < Stop Price- As stated, the prices must "straddle" the last traded price on the symbol. EX: If the last price is 10:
- A SELL OCO must have the limit price greater than 10, and the stop price less than 10.
- A BUY OCO must have a limit price less than 10, and the stop price greater than 10.
-
Quantity Restrictions:
- Both legs must have the same quantity.
ICEBERGquantities however, do not have to be the same.
-
Execution Order:
- If the
LIMIT_MAKERis touched, the limit maker leg will be executed first BEFORE canceling the Stop Loss Leg. - if the Market Price moves such that the
STOP_LOSSorSTOP_LOSS_LIMITwill trigger, the Limit Maker leg will be canceled BEFORE executing theSTOP_LOSSLeg.
- If the
-
Canceling an OCO
- Canceling either order leg will cancel the entire OCO.
- The entire OCO can be canceled via the
orderListIdor thelistClientOrderId.
-
New Enums for OCO:
ListStatusTypeRESPONSE- used when ListStatus is responding to a failed action. (either order list placement or cancellation)EXEC_STARTED- used when an order list has been placed or there is an update to a list's status.ALL_DONE- used when an order list has finished executing and is no longer active.
ListOrderStatusEXECUTING- used when an order list has been placed or there is an update to a list's status.ALL_DONE- used when an order list has finished executing and is no longer active.REJECT- used when ListStatus is responding to a failed action. (either order list placement or cancellation)
ContingencyTypeOCO- specifies the type of order list.
-
New Endpoints:
- POST api/v3/order/oco
- DELETE api/v3/orderList
- GET api/v3/orderList
-
-
recvWindowcannot exceed 60000. -
New
intervalLettervalues for headers:- SECOND => S
- MINUTE => M
- HOUR => H
- DAY => D
-
New Headers
X-MBX-USED-WEIGHT-(intervalNum)(intervalLetter)will give your current used request weight for the (intervalNum)(intervalLetter) rate limiter. For example, if there is a one minute request rate weight limiter set, you will get aX-MBX-USED-WEIGHT-1Mheader in the response. The legacy headerX-MBX-USED-WEIGHTwill still be returned and will represent the current used weight for the one minute request rate weight limit. -
New Header
X-MBX-ORDER-COUNT-(intervalNum)(intervalLetter)that is updated on any valid order placement and tracks your current order count for the interval; rejected/unsuccessful orders are not guaranteed to haveX-MBX-ORDER-COUNT-**headers in the response.- Eg.
X-MBX-ORDER-COUNT-1Sfor "orders per 1 second" andX-MBX-ORDER-COUNT-1Dfor orders per "one day"
- Eg.
-
GET api/v1/depth now supports
limit5000 and 10000; weights are 50 and 100 respectively. -
GET api/v1/exchangeInfo has a new parameter
ocoAllowed.
executionReportevent now contains "g" which has theorderListId; it will be set to -1 for non-OCO orders.- New Event Type
listStatus;listStatusis sent on an update to any OCO order. - New Event Type
outboundAccountPosition;outboundAccountPositionis sent any time an account's balance changes and contains the assets that could have changed by the event that generated the balance change (a deposit, withdrawal, trade, order placement, or cancellation).
- -1131 BAD_RECV_WINDOW
recvWindowmust be less than 60000
- -1099 Not found, authenticated, or authorized
- This replaces error code -1999
- OCO_BAD_ORDER_PARAMS
- A parameter for one of the orders is incorrect.
- OCO_BAD_PRICES
- The relationship of the prices for the orders is not correct.
- UNSUPPORTED_ORD_OCO
- OCO orders are not supported for this symbol.
- X-MBX-USED-WEIGHT header added to Rest API responses.
- Retry-After header added to Rest API 418 and 429 responses.
- When canceling the Rest API can now return
errorCode-1013 OR -2011 if the symbol'sstatusisn'tTRADING. api/v1/depthno longer has the ignored and empty[].api/v3/myTradesnow returnsquoteQty; the price * qty of for the trade.
<symbol>@depthand<symbol>@depthXstreams no longer have the ignored and empty[].
- Matching Engine stability/reliability improvements.
- Rest API performance improvements.
- Can now cancel orders through the Rest API during a trading ban.
- New filters:
PERCENT_PRICE,MARKET_LOT_SIZE,MAX_NUM_ICEBERG_ORDERS. - Added
RAW_REQUSTrate limit. Limits based on the number of requests over X minutes regardless of weight. - /api/v3/ticker/price increased to weight of 2 for a no symbol query.
- /api/v3/ticker/bookTicker increased weight of 2 for a no symbol query.
- DELETE /api/v3/order will now return an execution report of the final state of the order.
MIN_NOTIONALfilter has two new parameters:applyToMarket(whether or not the filter is applied to MARKET orders) andavgPriceMins(the number of minutes over which the price averaged for the notional estimation).intervalNumadded to /api/v1/exchangeInfo limits.intervalNumdescribes the amount of the interval. For example:intervalNum5, withintervalminute, means "every 5 minutes".
-
(qty * price) of all trades / numTrades of the trades over previous 5 minutes.
-
If there is no trade in the last 5 minutes, it takes the first trade that happened outside of the 5min window. For example if the last trade was 20 minutes ago, that trade's price is the 5 min average.
-
If there is no trade on the symbol, there is no average price and market orders cannot be placed. On a new symbol with
applyToMarketenabled on theMIN_NOTIONALfilter, market orders cannot be placed until there is at least 1 trade. -
The current average price can be checked here:
https://api.binance.com/api/v3/avgPrice?symbol=<symbol>For example: https://api.binance.com/api/v3/avgPrice?symbol=BNBUSDT
Last quote asset transacted quantity(as variableY) added to execution reports. Represents thelastPrice*lastQty(L*l).
- New filter:
ICEBERG_PARTS POST api/v3/ordernew defaults fornewOrderRespType.ACK,RESULT, orFULL;MARKETandLIMITorder types default toFULL, all other orders default toACK.- POST api/v3/order
RESULTandFULLresponses now havecummulativeQuoteQty - GET api/v3/openOrders with no symbol weight reduced to 40.
- GET api/v3/ticker/24hr with no symbol weight reduced to 40.
- Max amount of trades from GET /api/v1/trades increased to 1000.
- Max amount of trades from GET /api/v1/historicalTrades increased to 1000.
- Max amount of aggregate trades from GET /api/v1/aggTrades increased to 1000.
- Max amount of aggregate trades from GET /api/v1/klines increased to 1000.
- Rest API Order lookups now return
updateTimewhich represents the last time the order was updated;timeis the order creation time. - Order lookup endpoints will now return
cummulativeQuoteQty. IfcummulativeQuoteQtyis < 0, it means the data isn't available for this order at this time. REQUESTSrate limit type changed toREQUEST_WEIGHT. This limit was always logically request weight and the previous name for it caused confusion.
cummulativeQuoteQtyfield added to order responses and execution reports (as variableZ). Represents the cummulative amount of thequotethat has been spent (with aBUYorder) or received (with aSELLorder). Historical orders will have a value < 0 in this field indicating the data is not available at this time.cummulativeQuoteQtydivided bycummulativeQtywill give the average price for an order.O(order creation time) added to execution reports
- GET /api/v1/historicalTrades weight decreased to 5
- GET /api/v1/aggTrades weight decreased to 1
- GET /api/v1/klines weight decreased to 1
- GET /api/v1/ticker/24hr all symbols weight decreased to number of trading symbols / 2
- GET /api/v3/allOrders weight decreased to 5
- GET /api/v3/myTrades weight decreased to 5
- GET /api/v3/account weight decreased to 5
- GET /api/v1/depth limit=500 weight decreased to 5
- GET /api/v1/depth limit=1000 weight decreased to 10
- -1003 error message updated to direct users to websockets
- GET /api/v1/ticker/24hr single symbol weight decreased to 1
- GET /api/v3/openOrders all symbols weight decreased to number of trading symbols / 2
- GET /api/v3/allOrders weight decreased to 15
- GET /api/v3/myTrades weight decreased to 15
- GET /api/v3/order weight decreased to 1
- myTrades will now return both sides of a self-trade/wash-trade
- GET /api/v1/aggTrades weight changed to 2
- GET /api/v1/klines weight changed to 2
- GET /api/v3/order weight changed to 2
- GET /api/v3/allOrders weight changed to 20
- GET /api/v3/account weight changed to 20
- GET /api/v3/myTrades weight changed to 20
- GET /api/v3/historicalTrades weight changed to 20